Zer0Galaxy 2 102 Опубликовано: 12 февраля, 2016 (изменено) Небольшая библиотечка, позволяющая рисовать простые геометрические фигуры. pastebin get 1WmfjNfU lib/graffiti.lua Особенностью библиотеки является то, что в качестве "пикселя" используется не знакоместо, а половина знакоместа. Таким образом, максимальное разрешение, которое можно получить на мониторе 3-его уровня составляет 160х100. Отсчет ведется с верхнего левого угла экрана и начинается с единицы. Функции, предоставляемые библиотекой: setColor(color) - устанавливает цвет чернил, которым в дальнейшем будет осуществляться рисование getColor(x,y) - возвращает цвет, в который окрашен "пиксель" x, y. Возвращается реальный цвет "пикселя", а не тот в который он ранее окрашивался. В виду того, что ОС-мониторы далеко не true-color, эти цвета могут отличаться. dot(x,y) - окрашивает в текущий цвет "пиксель" с координатами x, y. move(x,y) - чертит линию от последней установленной точки до точки с координатами x, y. Позволяет создавать ломанные линии. line(x0,y0,x1,y1) - чертит линию от точки x0, y0 до x1, y1. circle(x,y,r[,fill]) - чертит окружность с центром x, y и радиусом r. Если указан параметр fill, он используется в качестве цвета заливки окружности. Если fill равняется true, окружность заливается текущим цветом. fill(x,y) - заливает текущим цветом область, которой принадлежит точка x, y polygon(x1,y1,x2,y2, ... , xn,yn[,fill]) - рисует многоугольник по заданным вершинам. Если количество параметров нечетно, последний параметр используется как цвет заливки многоугольника. load(path) - загружает картинку из файла по указанному пути (поддерживаются png-файлы) и возвращает структуру, содержащую эту картинку. За основу взята библиотека работы с PNG-файлами libPNGimage, автор TehSomeLuigi draw(pic, x, y [,SizeX [,SizeY ] ] ) - рисует картинку pic на экран так, что левый верхний угол картинки размещается по координатам x, y. Параметр pic должен быть структурой, которую возвращает функция load или строкой с именем файла. В случае, когда pic - строка, картинка будет загружена из указанного файла, однако, в этом случае повторная прорисовка той же картинки вызовет ее повторную загрузку, что увеличит время прорисовки. Поддерживается альфа-канал. Если указаны параметры SizeX и SizeY, изображение растягивается/сжимается до указанных размеров. Если указан только параметр SizeX, высота картинки изменяется пропорционально изменению ширины. Пример использования библиотеки: g=require("graffiti") --Подключаем библиотеку require("term").clear()--Очищаем экран g.setColor(0xff0000) --Устанавливаем красный цвет чернил for i=1,50,10 do --Рисуем линии g.line(1,1,50,i) end g.setColor(0x00ff00) --Устанавливаем зеленый цвет чернил g.circle(65,25,20) --Рисуем окружность g.setColor(0x0000ff) --Устанавливаем синий цвет чернил g.dot(10,15) --Рисуем треугольник g.move(40,35) g.move(30,45) g.move(10,15) И вот результат на мониторе второго уровня: Планы на будущее: 1. Реализовать заливку (реализовано) 2. Осуществить возможность прорисовки изображений из png-файла (реализовано) Изменено 29 марта, 2016 пользователем Zer0Galaxy 16 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hello 125 Опубликовано: 13 февраля, 2016 А разбрызгивание можете сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 102 Опубликовано: 13 февраля, 2016 Разбрызгивание это функция скорее графического редактора. Оно легко реализуется при помощи graffiti.dot() и генератора случайных чисел. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 102 Опубликовано: 15 февраля, 2016 Добавлены функции getColor и fill 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 102 Опубликовано: 17 февраля, 2016 Добавлена функция polygon. Теперь можно рисовать вот такие пентаграммы g.setColor(0xff0000) g.circle(80,50,44) g.polygon(80,93, 54,16, 120,64, 40,64, 106,16, 0xffff00) 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 102 Опубликовано: 22 февраля, 2016 (изменено) Добавлены функции 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) онлайн PNG-редактор Изменено 22 февраля, 2016 пользователем Zer0Galaxy 6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 102 Опубликовано: 2 марта, 2016 Добавлена возможность масштабирования при выводе 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 6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TC1061 13 Опубликовано: 13 апреля, 2017 как ты сделал пиксели в ползнака? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TC1061 13 Опубликовано: 13 апреля, 2017 ой стоп я понял. Ты используешь знак который помещается на половинку пикселя OC и выбираешь background и foreground и делаешь чето там 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 102 Опубликовано: 13 апреля, 2017 Угу. А еще есть Шрифт Брайля. С ним пиксель еще меньше получается, вот только с цветом проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ALeXeR 64 Опубликовано: 14 апреля, 2017 вот чего я не видал в подобных библиотеках - так это логическое совмещение полусимвола (Шрифт Брайля) и обычного текста, в одних можно выводить брайлем, в других текстом но саморучно туда символы Брайля пихать, а вот бы какое-то логическое апи) моя либа как бы вроде должна была иметь такую реализацию, но загнулась в конец, ибо меня грузят в вузе) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 481 Опубликовано: 14 апреля, 2017 Надо взять все крутые идеи и сплавить в одну Ultimate Graphical Library (сокращённо UGLY). 7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TC1061 13 Опубликовано: 18 августа, 2017 Надо взять все крутые идеи и сплавить в одну Ultimate Graphical Library (сокращённо UGLY). Это сэкономит всем время. Классная идея. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
utevaugu36 6 Опубликовано: 12 марта, 2018 Крутая либа! Буду использовать в своих проектах *Оч мало софта, который мне прям нравится, эта либа - одна из этого софта. ---------------------------------------------- Есть предложение. Я, помню, писал для своей 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 4 264 Опубликовано: 12 марта, 2018 ... А почему нельзя было залить картинку на imgur? Теперь она рипнулась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах