Перейти к публикации
Форум - ComputerCraft
Arseniy10

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

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

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
 
Скриншоты:

 

 Oa6NTD0.png

 
0Y0Q6rd.png

 

Изменено пользователем Arseniy10
  • Like 2

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


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

  1. Перечитай ещё раз (и потом ещё раз), что ты написал. Пока это жестокий поток мыслей, в котором ничегошеньки не понятно.

Используй репозиторий https://hel.fomalhaut.me/ вместо пасты миллиона ссылок с wget.

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


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

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

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

  • Like 2

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


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

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

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

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


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

У меня почему-то когда сохраняю в файл,  в файле просто число 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

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


Ссылка на сообщение
Поделиться на других сайтах
local pic = gpic.new(1, 1, 10, 5) --X, Y, Ширина, Длина

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

 

 

 

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

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


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

 

 

 

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

 

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

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


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

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

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


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

 

У меня почему-то когда сохраняю в файл,  в файле просто число 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

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


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

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

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

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


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

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

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

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


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

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

DV3EoJy.png

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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×