John M. Vlissides, Mark A. Linton, "Applying Object-Oriented Design to Structured Graphics"
https://www.softwarepreservation.org/projects/c_plus_plus/library/interviews/graphic.pdf
#articles #graphics #oop #programming
https://www.softwarepreservation.org/projects/c_plus_plus/library/interviews/graphic.pdf
#articles #graphics #oop #programming
memory heap
John M. Vlissides, Mark A. Linton, "Applying Object-Oriented Design to Structured Graphics" https://www.softwarepreservation.org/projects/c_plus_plus/library/interviews/graphic.pdf #articles #graphics #oop #programming
Экспериментирую с API для рисования в Guile-PNG.
Исходный код для генерации рисунка:
В качестве входного изображения программе подаю на
#guile #png #graphics #projects #scheme
Исходный код для генерации рисунка:
(define (main args)
(let* ((image (png->scm))
(color (u8-list->bytevector '(255 255 255 0))))
(let loop ((w 10))
(unless (= w 490)
(let ((rect (make <rectangle>
#:position (make <point>
#:x 10
#:y 10)
#:width w
#:height w
#:color color)))
(draw! image rect))
(loop (+ w 10))))
(scm->png image)))
В качестве входного изображения программе подаю на
stdin изображение с чёрным фоном размером 500x500px, поверх которого выполняется отрисовка. Результат программа выводит в stdout, который уже перенаправляю в файл.#guile #png #graphics #projects #scheme
👍1
Реализовал алгоритм отрисовки эллипсов.
#guile #png #graphics #projects #scheme
(define (main args)
(let* ((image (png->scm))
(color (u8-list->bytevector '(255 255 255 0)))
(ellipse (make <ellipse>
#:width 300
#:height 200
#:center (make <point>
#:x 250
#:y 250)
#:color color)))
(draw! image ellipse)
(scm->png image)))
#guile #png #graphics #projects #scheme
⚡2
Круг — частный случай эллипса.
(use-modules (rnrs bytevectors)#guile #png #graphics #projects #scheme
(oop goops)
(png)
(png graphics))
(define (main args)
(let* ((image (png->scm))
(color (u8-list->bytevector '(255 255 255 0)))
(circle (make <circle>
#:radius 200
#:center (make <point>
#:x 250
#:y 250)
#:color color)))
(draw! image circle)
(scm->png image)))
👍3⚡1
Эксперименты с рекурсивной отрисовкой в Guile-PNG.
#guile #png #scheme #lisp #graphics
(use-modules (oop goops)
(png)
(png image)
(png graphics))
(define (draw-square! image x y size color)
(let ((square (make <rectangle>
#:position (make <point>
#:x x
#:y y)
#:width size
#:height size
#:color color)))
(draw! image square)))
(define (draw-squares! image x y size color)
(draw-square! image x y size color)
(when (> size 10)
(draw-squares! image
(+ x size)
(+ y (floor/ size 2))
(floor/ size 2)
color)))
(define (main args)
(let ((image (make <png-image>
#:width 1000
#:height 600))
(color #vu8(255 255 255 0)))
(draw-squares! image 0 50 500 color)
(scm->png image)))
#guile #png #scheme #lisp #graphics
💩3
memory heap
Эксперименты с рекурсивной отрисовкой в Guile-PNG. (use-modules (oop goops) (png) (png image) (png graphics)) (define (draw-square! image x y size color) (let ((square (make <rectangle> #:position…
Решил проблему с отрисовкой вертикальных и горизонтальных линий в Guile-PNG, сделав для них частные случаи, вместо использования алгоритма Брезенхэма.
#guile #png #scheme #lisp #graphics
#guile #png #scheme #lisp #graphics
❤4💩3
По-приколу реализовал в рамках Guile-PNG low-pass фильтр (по найденному примеру на C++ из интернета) для реализации эффекта "Размывания" ("Blur").
Левое изображение — оригинал, правое — результат обработки.
Не во всех случаях пока корректно работает, требуется тестирование. Но уже радует, что что-то получилось.
#projects #graphics #guile #png
Левое изображение — оригинал, правое — результат обработки.
Не во всех случаях пока корректно работает, требуется тестирование. Но уже радует, что что-то получилось.
#projects #graphics #guile #png
👾2
memory heap
По-приколу реализовал в рамках Guile-PNG low-pass фильтр (по найденному примеру на C++ из интернета) для реализации эффекта "Размывания" ("Blur"). Левое изображение — оригинал, правое — результат обработки. Не во всех случаях пока корректно работает, требуется…
Научил Guile-PNG читать чанки неизвестных типов без ошибок.
Вот тут нашёл неплохой обзор внутренностей формата PNG:
https://github.com/corkami/formats/blob/master/image/png.md
Конечно это не стандарт, где вообще всё написано, но формат представления в статье способствует охвату многих ключевых особенностей.
Кстати, в описании формата (RFC 2083) упоминается, формат PNG может быть расширен новыми возможностями за счёт добавления специальных чанков, но сами дополнительные чанки являются предметом обсуждения отдельных стандартов. В принципе организация или ПО могут добавлять расширения формата для приватного использования без прохождения процедуры официальной регистрации, однако это может приводить к проблемам совместимости. Декодеры изображений PNG должны быть готовы к появлению приватных (незарегистрированных) видов чанков и обрабатывать их.
Вот примеры публичных расширений формата PNG:
ww.libpng.org/pub/png/spec/1.1/pngext-1.1.0-pdg.html
#projects #graphics #guile #png
Вот тут нашёл неплохой обзор внутренностей формата PNG:
https://github.com/corkami/formats/blob/master/image/png.md
Конечно это не стандарт, где вообще всё написано, но формат представления в статье способствует охвату многих ключевых особенностей.
Кстати, в описании формата (RFC 2083) упоминается, формат PNG может быть расширен новыми возможностями за счёт добавления специальных чанков, но сами дополнительные чанки являются предметом обсуждения отдельных стандартов. В принципе организация или ПО могут добавлять расширения формата для приватного использования без прохождения процедуры официальной регистрации, однако это может приводить к проблемам совместимости. Декодеры изображений PNG должны быть готовы к появлению приватных (незарегистрированных) видов чанков и обрабатывать их.
Вот примеры публичных расширений формата PNG:
ww.libpng.org/pub/png/spec/1.1/pngext-1.1.0-pdg.html
#projects #graphics #guile #png
GitHub
GitHub - artyom-poptsov/guile-png: Portable Network Graphics (PNG) library for GNU Guile.
Portable Network Graphics (PNG) library for GNU Guile. - artyom-poptsov/guile-png