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


Фотография

Библиотека для сохранения изображений (GPIC)

Картинка OC Lua ASCII

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 Оффлайн   Arseniy10

Arseniy10
  • Пользователи
  • Сообщений: 97
  • Уровень сигнала: 0,14%
  • В игре: 1 час. 3 мин.
  • ГородКаруселин

Награды

     

Отправлено 07 Февраль 2017 - 08:57

GPIC

Good_Pudge's Pictures

 
Небольшая библиотека, позволяющая сохранять изображения. Но в чем же ее особенность?
 
Библиотека с помощью gpu.get берет символ и его цвета. Затем она перебирает таблицу, сравнивает с цветом и если значение из таблицы совпадает с цветом, то берет соответствующий ключ таблицы и с помощью string.char превращает в ASCII символ. На 1 пиксель уходит 3 байта (цвет фона, цвет символов, символ).
 
Пример работы:

local gpic = require("gpic")

local pic = gpic.new(1, 1, 10, 5) --X, Y, Ширина, Высота
--вернет таблицу с изображением
gpic.draw(10, 10, pic) --рисует на координатах (10;10)

gpic.write(pic,"/home/test.pic") --пишет изображение в указанный путь

local image = gpic.read("/home/test.pic") --читает изображение из указанного пути и возвращает изображение, которое потом можно отрисовать с помощью gpic.draw()

Скачать (нужен HPM):
 
hpm install GPIC@2.2.0
 
Скриншоты:

Спойлер


Сообщение отредактировал Arseniy10: 07 Март 2017 - 16:20

  • Totoro и Asior это нравится

#2 Оффлайн   Kartze

Kartze
  • Пользователи
  • Сообщений: 435
  • Уровень сигнала: 40,57%
  • В игре: 306 час. 24 мин.

Награды

              

Отправлено 07 Февраль 2017 - 09:01

Скриншоты. Ни черта не понять.



#3 Онлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 2 002
  • Уровень сигнала: 169,33%
  • В игре: 1278 час. 43 мин.

Награды

                                               

Отправлено 07 Февраль 2017 - 09:04

  1. Перечитай ещё раз (и потом ещё раз), что ты написал. Пока это жестокий поток мыслей, в котором ничегошеньки не понятно.
  2. Используй репозиторий https://hel.fomalhaut.me/ вместо пасты миллиона ссылок с wget.


#4 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 07 Февраль 2017 - 12:24

Как я понял, либа позволяет сохранять область экрана в таблицу, а потом восстанавливать.

На мой взгляд, три байта на символ это чересчур. Дело в том, что на экране соседние символы имеют как правило одинаковый цвет фона и шрифта. Это можно использовать, что бы минимизировать объем занимаемой памяти. Посмотри как я это делал в MiddayCommanderе и в отладчике.


  • eu_tomat и Kartze это нравится

#5 Оффлайн   Asior

Asior
  • Пользователи
  • Сообщений: 147
  • Уровень сигнала: 67,7%
  • В игре: 511 час. 16 мин.

Награды

                          

Отправлено 06 Март 2017 - 12:28

Замечательная библиотека, писал нечто похожее, но там были крупные проблемы с сохранением и обратным чтением картинки. Собственно у вас та-же ошибка. Вот код после которого программа клеит ласты.

local pic=require('gpic')
local com = require("component")
local gpu = com.gpu

for y=1,25 do
  for x=1,80 do
    gpu.setForeground(math.random(0xffffaa))
    gpu.set(x,y,'Ж')
  end
  os.sleep(0)
end

pic.write(pic.new(1,1,80,25),"test.txt")
pic.draw(1,1,pic.read('test.txt'))

Удачной отладки вам  :lol:


Сообщение отредактировал Asior: 06 Март 2017 - 12:28


#6 Оффлайн   Laine_prikol

Laine_prikol
  • Пользователи
  • Сообщений: 133
  • Уровень сигнала: 0,54%
  • В игре: 4 час. 6 мин.

Награды

           

Отправлено 06 Март 2017 - 19:40

У меня почему-то когда сохраняю в файл,  в файле просто число 80 и больше нечего.

 if keyboard.isControlDown() == true then
 os.sleep(0.1) 
	local picture = gpic.new(1, 1, 80, 25)
	gpic.draw(1, 1, picture) 
	gpic.write(picture,"/home/image.gpic")
end

Сообщение отредактировал Laine_prikol: 06 Март 2017 - 19:41


#7 Оффлайн   Ingr

Ingr
  • Пользователи
  • Сообщений: 185
  • Уровень сигнала: 42,65%
  • В игре: 322 час. 4 мин.
  • ГородМинск

Награды

     

Отправлено 06 Март 2017 - 22:16

local pic = gpic.new(1, 1, 10, 5) --X, Y, Ширина, Длина

простите, а "Длина" это куда?

 

У меня почему-то когда сохраняю в файл, в файле просто число 80 и больше нечего.
а что должно быть?

Сообщение отредактировал Ingr: 06 Март 2017 - 22:17


#8 Оффлайн   Laine_prikol

Laine_prikol
  • Пользователи
  • Сообщений: 133
  • Уровень сигнала: 0,54%
  • В игре: 4 час. 6 мин.

Награды

           

Отправлено 07 Март 2017 - 12:07

 

 

 

а что должно быть?

 

Точно не число 80, потому-что когда я хочу отобразить картинку которую только что сохранил, нечего не происходит



#9 Оффлайн   Ingr

Ingr
  • Пользователи
  • Сообщений: 185
  • Уровень сигнала: 42,65%
  • В игре: 322 час. 4 мин.
  • ГородМинск

Награды

     

Отправлено 07 Март 2017 - 12:53

если я правильно понял, то либа должна сохранять и воспроизводить на символьном экране список строк? Если честно то когда это называют картинкой, то несколько режет слух. Я, из за этого, даже не сразу понял сто это за либа. Пожалуйста пишите описания так чтобы было понятно даже таким нубам как я :)



#10 Оффлайн   Arseniy10

Arseniy10
  • Автор темы
  • Пользователи
  • Сообщений: 97
  • Уровень сигнала: 0,14%
  • В игре: 1 час. 3 мин.
  • ГородКаруселин

Награды

     

Отправлено 07 Март 2017 - 16:15

 

У меня почему-то когда сохраняю в файл,  в файле просто число 80 и больше нечего.

 if keyboard.isControlDown() == true then
 os.sleep(0.1) 
	local picture = gpic.new(1, 1, 80, 25)
	gpic.draw(1, 1, picture) 
	gpic.write(picture,"/home/image.gpic")
end

Скопировал твой код, возможно у тебя неправильная кодировка. Само число 80 ДОЛЖНО быть, ибо это ширина картинки.

DV3EoJy.png


Сообщение отредактировал Arseniy10: 07 Март 2017 - 16:21


#11 Оффлайн   Arseniy10

Arseniy10
  • Автор темы
  • Пользователи
  • Сообщений: 97
  • Уровень сигнала: 0,14%
  • В игре: 1 час. 3 мин.
  • ГородКаруселин

Награды

     

Отправлено 07 Март 2017 - 17:16

Замечательная библиотека, писал нечто похожее, но там были крупные проблемы с сохранением и обратным чтением картинки. Собственно у вас та-же ошибка. Вот код после которого программа клеит ласты.

local pic=require('gpic')
local com = require("component")
local gpu = com.gpu

for y=1,25 do
  for x=1,80 do
    gpu.setForeground(math.random(0xffffaa))
    gpu.set(x,y,'Ж')
  end
  os.sleep(0)
end

pic.write(pic.new(1,1,80,25),"test.txt")
pic.draw(1,1,pic.read('test.txt'))

Удачной отладки вам  :lol:

Я нашел ошибку

Цвет, который забрал метод:

GSf5fHn.png

Цвет в таблице:

9j1MbEz.png

Сама таблица создавалась по этой картинке:

zbyB9am.png

Как это править, не знаю


Сообщение отредактировал Arseniy10: 07 Март 2017 - 17:17


#12 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 07 Март 2017 - 17:28

Цвет хранится в числе типа number.

Значение может быть любым. Но визуально оно сведётся к одному из цветов таблицы.



#13 Оффлайн   Laine_prikol

Laine_prikol
  • Пользователи
  • Сообщений: 133
  • Уровень сигнала: 0,54%
  • В игре: 4 час. 6 мин.

Награды

           

Отправлено 07 Март 2017 - 18:42

Скопировал твой код, возможно у тебя неправильная кодировка. Само число 80 ДОЛЖНО быть, ибо это ширина картинки.

DV3EoJy.png

На OpenOS 1.6 всё нормально сохраняется, а на 1.5 почему-то просто число 80 и больше нечего







Темы с аналогичным тегами Картинка, OC, Lua, ASCII

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных