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

Графическая библиотека "Граффити"

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

Разбрызгивание это функция скорее графического редактора. Оно легко реализуется при помощи graffiti.dot() и генератора случайных чисел.

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


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

Добавлена функция polygon.

Теперь можно рисовать вот такие пентаграммы

g.setColor(0xff0000)
g.circle(80,50,44)
g.polygon(80,93, 54,16, 120,64, 40,64, 106,16, 0xffff00)

post-7-0-12499700-1455723209_thumb.png

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


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

Добавлены функции load и draw.

Пример наложения изображения на пентаграмму:

g.setColor(0xff0000)
g.circle(80,50,44)
g.polygon(80,93, 54,16, 120,64, 40,64, 106,16, 0xffff00)
g.draw("pic.png",1,1)

post-7-0-15403100-1456156623_thumb.png

 

онлайн PNG-редактор

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

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


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

Добавлена возможность масштабирования при выводе png-файла (см. функцию draw):

java=g.load("Java_RE.png")
for i=1,10 do
  g.draw(java,math.random(-50,110),math.random(-50,50),math.random(40,80),math.random(40,80))
end

post-7-0-24316300-1456935141_thumb.png

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


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

ой стоп я понял. Ты используешь знак который помещается на половинку пикселя OC и выбираешь background и foreground и делаешь чето там

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


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

Угу. А еще есть Шрифт Брайля. С ним пиксель еще меньше получается, вот только с цветом проблемы.

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


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

вот чего я не видал в подобных библиотеках - так это логическое совмещение полусимвола (Шрифт Брайля) и обычного текста, в одних можно выводить брайлем, в других текстом но саморучно туда символы Брайля пихать, а вот бы какое-то логическое апи) моя либа как бы вроде должна была иметь такую реализацию, но загнулась в конец, ибо меня грузят в вузе)

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


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

Надо взять все крутые идеи и сплавить в одну Ultimate Graphical Library (сокращённо UGLY).

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


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

Надо взять все крутые идеи и сплавить в одну Ultimate Graphical Library (сокращённо UGLY).

Это сэкономит всем время. Классная идея.

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


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

Крутая либа! Буду использовать в своих проектах :) *Оч мало софта, который мне прям нравится, эта либа - одна из этого софта.

----------------------------------------------

Есть предложение. Я, помню, писал для своей apiAPI функцию построения графиков. Чутка подкорректируй, и все будет ок ;D

function api.grafik(temperatures)
  if temperatures == nil then temperatures = {} for i = 1, 12 do temperatures[i] = math.random(-10, 10) end end
  max = -math.huge
  for i = 1, #temperatures-1 do if max < temperatures[i+1] then max = temperatures[i] end end
  width, height = component.gpu.getResolution()
  buffer.semiPixelLine(4, height/2, 4, height/2-max-5, 0xFFFFFF)
  buffer.semiPixelLine(4, height/2, 4, height/2+max+5, 0xFFFFFF)
  buffer.semiPixelLine(4, height/2, #temperatures*4, height/2, 0xFFFFFF)
  old, new, x, lx = 1, 2, 7, 8
  for i = 1, #temperatures-1 do
    buffer.semiPixelLine(x, (height/2)-(temperatures[old]), lx, (height/2)-(temperatures[new]), 0xFF0000)
    old, new, x, lx = old + 1, new + 1, x + 2, lx + 2
  end
  buffer.draw(true)
end --Написано под doubleBuffer, используется функция рисования линии(x1, y1, x2, y2, color)

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


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

...

А почему нельзя было залить картинку на imgur? 

Теперь она рипнулась.

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


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

Библиотека не может нормально считывать большие картинки (конкретно эта картинка 800x1100): https://i.waifu.pics/oRYkwh4.png

Выкидывает ошибку cannot perform arithmetic on a nil value: local 'dist_extrabits' (ну, или примерно так).

Я знаю, что для нормального считывания не хватит памяти, но библиотека работает всё равно некорректно.

 

Проблема в том, что большое изображение разбивается на куски IDAT, а либа (deflate на пару с libPNGimage) пытается каждый из кусков разархивировать по отдельности. В то время как в спецификации PNG (https://www.w3.org/TR/PNG/#11IDAT) сказано:

Цитата

The compressed datastream is then the concatenation of the contents of the data fields of all the IDAT chunks.

 

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

oRYkwh4.png

 

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


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

OutStringStream, используемый в библиотеке, на добавление каждого символа пересобирает строку. Так как строки в Lua неизменяемы, это приводит к копированию строки O(n) раз, давая суммарную сложность O(n^2).

Альтернативная реализация, меньше страдающая от этого недостатка:

local outssmt = {}                                     ----143

function outssmt:__call(write)
	self.buf[#self.buf + 1] = string.char(write)
end
function outssmt:__index(k)
	if k == 'str' then
		self._str = self._str .. table.concat(self.buf, '')
		self.buf = {}
		return self._str
	end
	return nil
end

function outssmt.OutStringStream()
	local outss = {_str="", buf={}}
	setmetatable(outss, outssmt)
	return outss
end

 

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


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

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

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

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

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

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

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

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

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


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