Перейти к содержимому
Asummonster

AsumScreenshoter - программа для создания "скриншотов" экрана

Рекомендуемые сообщения

Программа позволяет создавать снимки экрана.

Сохраняет она его в файл /screenshots/Screenshot-Год-День-Час-Минута.ast

Формат ast

Скрытый текст

Первые 4 байта - ширина и высота в hex, далее идут символы, которые были на экране или управляющие символы, которые означают смену цвета, после которых идёт цвет - 6 байт hex.

Для выхода из программы после распечатывания экрана надо по нему нажать(создать ивент touch).

Вот код "AsumScreenshoter"'а:

local mode = ({...})[1]
if mode==nil then
  print("Использование: screenshot init для создания ивента сохранения экрана(Кнопка Print Screen, папка screenshots)\n screenshot <имя файла> для просмотра(По окончанию просмотра нажмите на экран)"); os.exit()
  return
end
local fs = require("filesystem")
local unicode = require("unicode")
local gpu =  require("component").gpu
local event =  require("event")
local function dec2hex(n, s) local h = string.format("%x", n) return string.rep("0", s-string.len(h))..h end
local function hex2dec(s) return tonumber("0x"..s) end
local function createScreenshotFile()
  DD, HH, MM, SS = os.date("%Y"), os.date("%H"), os.date("%M"), os.date("%S")
  if not fs.isDirectory("/screenshots") then fs.makeDirectory("/screenshots")
  end
  return io.open("/screenshots/Screenshot-"..DD.."-"..HH.."-"..MM.."-"..SS..".ast", "w")
end
local function getScreen()
  local W, H = gpu.getResolution()
  local screenshot = dec2hex(W, 2)..dec2hex(H, 2)
  local lfg, lbg
  for y=1, H do
    for x=1, W do
      local symbol, fgcolor, bgcolor = gpu.get(x, y)
      if lfg ~= fgcolor then
        lfg = fgcolor
        screenshot = screenshot .. "␑"
        screenshot = screenshot .. dec2hex(fgcolor, 6)
      end
      if lbg ~= bgcolor then
        lbg = bgcolor
        screenshot = screenshot .. "␒"
        screenshot = screenshot .. dec2hex(bgcolor, 6)
      end
      screenshot = screenshot .. symbol
    end
  end
  return screenshot
end
local function writeScreen()
  local file=createScreenshotFile()
  file:write(getScreen())
  file:flush()
  file:close()
end
local function printScreen(filename)
  local screenshot=io.lines(filename)()
  local oldw, oldh = gpu.getResolution()
  local header = screenshot:sub(1, 4)
  screenshot = screenshot:sub(5)
  local W = hex2dec(header:sub(1, 2))
  local x = 0
  local H = hex2dec(header:sub(3, 4))
  local y = 0
  gpu.setResolution(W, H)
  while y < H do
    y = y + 1
    x = 0
    while x < W do
      local sym = unicode.sub(screenshot, 1, 1)
      if sym == "␑" then
        gpu.setForeground(hex2dec(unicode.sub(screenshot, 2, 7)))
        screenshot = unicode.sub(screenshot, 8)
      elseif sym == "␒" then
        gpu.setBackground(hex2dec(unicode.sub(screenshot, 2, 7)))
        screenshot = unicode.sub(screenshot, 8)
      else
        x = x + 1
        gpu.set(x, y, sym)
        screenshot = unicode.sub(screenshot, 2)
      end
    end
  end
  event.pull("touch")
  gpu.setResolution(oldw, oldh)
end
local function saveScreenByKey(_, _, key1, key2)
  if key1==0 and key2==183 then
    writeScreen()
  end
end
if mode=="init" then
  event.listen("key_down", saveScreenByKey)
  else printScreen(mode)
end

Надеюсь вы будете пользоваться этой программой!=)

Для того,что бы начать делать скриншоты, после каждой перезагрузки надо запустить приложение с параметром init 

Для того,что бы создать скриншот после инициализации-надо нажать кнопку Print Screen

Изменено пользователем Asummonster
Улучшение производительности, более компактное хранение

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

F2 нажми.


Делает снимок даже с цветом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

F2 нажми.

Делает снимок даже с цветом.

Во-во! С цветом и даже в PNG! Крутая штука, согласен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

:D

 

 

Монстрик сейчас отлучен от сервера и находится в изгнании. Поэтому он сейчас пишет миллион программок в день, чтобы реабилитироваться. Он завтра начнет писать OpenDirectX, почти уверен в этом=)

 

Но я же его предупреждал, чтобы не чебучил на сервере. На 5 мин. нельзя оставить админский комп (при чем именно тот единственный, на котором не был прописан аддюзер), как Монстрик уже там гм-ку себе пытается прописать, в каждую дюрдочку норовит залезть и вынюхивает там все, пытается прощимиться=). Как дети малые, или солдаты - только отвернулся, он уже задницу где-то отдавил или в самоволке уже в дюндель трезвый. Уже раз 5 его банили, наверное, лично я только 3 раза) У Нео, не давеча, спёр честно заработанные компы, тоже норку нашел.

 

Такое чувство, что Монстрик не играть пришел на сервак, а делать маленькие пакости в игре и рекурсивно вызывать кучу функций. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А можно я по теме? Считаю, что хранить картинку в виде сериализованной таблицы крайне не рационально. Куча лишних скобок, пробелов и запятых. Не хочешь подумать над более компактным форматом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А можно я по теме? Считаю, что хранить картинку в виде сериализованной таблицы крайне не рационально. Куча лишних скобок, пробелов и запятых. Не хочешь подумать над более компактным форматом?

Могу записывать просто в строку

Я просто выбрал самый лёгкий и надёжный вариант

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Самый легкий вариант не всегда самый лучший. Теоретически каждое знакоместо должно занимать в файле 2-3 байта. 1 байт - цвет и 1-2 байта - символ. А если еще упаковку применить ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Самый легкий вариант не всегда самый лучший. Теоретически каждое знакоместо должно занимать в файле 2-3 байта. 1 байт - цвет и 1-2 байта - символ. А если еще упаковку применить ...

По моему,25 килобайт за скриншот 80x25 не очень много весит, но я подумаю об изменении формата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А можно я по теме? Считаю, что хранить картинку в виде сериализованной таблицы крайне не рационально. Куча лишних скобок, пробелов и запятых. Не хочешь подумать над более компактным форматом?

Истина!

Таблицы громоздки. Хранение одного большого экрана отожрет почти всю планку памяти тиер1, строкой хранить на несколько порядков компактнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Истина!

Таблицы громоздки. Хранение одного большого экрана отожрет почти всю планку памяти тиер1, строкой хранить на несколько порядков компактнее.

А как хранить строкой?Хотя,у меня есть идея....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По моему,25 килобайт за скриншот 80x25 не очень много весит, но я подумаю об изменении формата.

 

Монстер, у меня голограмма 48х32х48 весит всего 18,5 Кб. И это без сжатия, которе предлагал Зеро.

Так что - апргейдить! Однозначно апгрейдить!  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Решил сделать TeamViewer на базе твоей программы, а фигу. Модем может передать максимум 8 КБ, а картинка весит 25 КБ. Вот согласен с Тоторо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Решил сделать TeamViewer на базе твоей программы, а фигу. Модем может передать максимум 8 КБ, а картинка весит 25 КБ. Вот согласен с Тоторо.

У меня есть тимвмвер!!!адын

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня есть тимвмвер!!!адын

Ну уж нет, так не интересно)) Я лучше сам свой сделаю)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Велосипедист

У нас здесь клуб велосипедистов )

 

Решил сделать TeamViewer на базе твоей программы, а фигу. Модем может передать максимум 8 КБ, а картинка весит 25 КБ. Вот согласен с Тоторо.

Передавать скриншотами - моветон. 

 

Заключай GPU-шные ф-и вывода в конверт и, при их вызове, передавай их на удаленный хост, а от хоста передавай события клавиатуры мыши и пуль их в очередь событий.

Вот и весь тимвьювер.

Изменено пользователем swg2you

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он завтра начнет писать OpenDirectX, почти уверен в этом=)

Я его пишу XD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 25.06.2015 в 12:43, Totoro сказал:

 

Монстер, у меня голограмма 48х32х48 весит всего 18,5 Кб. И это без сжатия, которе предлагал Зеро.

Так что - апргейдить! Однозначно апгрейдить!  :)

Пришло время...
Не идеально, конечно, но стало лучше

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...