Board.KolibriOS.org
http://board.kolibrios.org/

Дизеринг на фасме
http://board.kolibrios.org/viewtopic.php?f=38&t=2379
Page 1 of 2

Author:  Heavyiron [ Tue Dec 11, 2012 8:24 pm ]
Post subject:  Дизеринг на фасме

Как-то давным давно наткнулся на интересые картинки, которые выглядят как полноцветные, а состоят всего из 8 цветов. Начал копать и наваял простенькую процедуру на fasm-е, которая умеет делать из 24-бит картинок 8-цветные. Плюс немного поэкспериментировал с алгоритмами. Во вложении 3 програмки, которые демонстрируют 3 алгоритма: Sierra lite, Floyd-Steinberg и Burkes. Первый самый быстрый, третий - самый качественный, но вдвое медленней, чем Sierra. Floyd-Steinberg где-то посередине между ними по скорости и качеству.
Не без помощи diamond-a процедура была оптимизирована. В принципе код писался для возможного улучшения качества картинки на ega/vga разрешениях. Но теперь такое оборудование уже разве что в музеях. Потому может сгодится для чего другого (графические редакторы, например).
Для примера взял файл из википедии, но bmp может быть любым 24-битным (правда его надо отразить по диагонали - такая уж особенность у функции вывода картинки в колибри). Программы простенькие, потому выделение памяти идет вручную и если будет желание потестировать на больших bmp, значение памяти для программы надо будет увеличить.

Attachments:
Original.png
Original.png [ 27.71 KiB | Viewed 5202 times ]
Dither.7z [97.96 KiB]
Downloaded 172 times
Burkes.png
Burkes.png [ 8.75 KiB | Viewed 5202 times ]

Author:  Heavyiron [ Tue Dec 11, 2012 8:30 pm ]
Post subject:  Re: Дизеринг на фасме

Более наглядный пример:

Attachments:
Burkes.png
Burkes.png [ 107.42 KiB | Viewed 5201 times ]
Original.jpg
Original.jpg [ 50.6 KiB | Viewed 5201 times ]

Author:  SoUrcerer [ Tue Dec 11, 2012 8:38 pm ]
Post subject:  Re: Дизеринг на фасме

Ох, видимо, программы не очень новые?:)
В любом случае, очень полезные модули для редактора могут быть.

Author:  Leency [ Tue Dec 11, 2012 8:49 pm ]
Post subject:  Re: Дизеринг на фасме

Малополезно, однако выглядит клёво.

Author:  dunkaist [ Tue Dec 11, 2012 8:54 pm ]
Post subject:  Re: Дизеринг на фасме

Нужно.

Требование отразить картинку, правда, доставляет неудобства.

Залей код на svn, пожалуйста. И так уже часто приходится бродить по форуму в поисках нужной картинки или кода.

Author:  IgorA [ Tue Dec 11, 2012 9:01 pm ]
Post subject:  Re: Дизеринг на фасме

Интересные алгоритмы, когда разгребусь с работой возможно добавлю эти функции в buf2d.
Скоро можно будет написать графический редактор с разными фильтрами.

Author:  Heavyiron [ Wed Dec 12, 2012 12:57 pm ]
Post subject:  Re: Дизеринг на фасме

dunkaist wrote:
Нужно.

Требование отразить картинку, правда, доставляет неудобства.

Залей код на svn, пожалуйста. И так уже часто приходится бродить по форуму в поисках нужной картинки или кода.

На SVN мне уже требуется функция восстановления пароля, давно ничего не заливал и уже успел потерять бумажку, на которой его записывал.
Насчет отражения - даже не знаю. Просто пошел пока самым простым путем - зашиваю в программу уже подготовленный BMP, процедура его обрабатывает и тут же выводится выводится 7-й функцией. Исходное изображение затирается, дополнительный буфер не используется. Почему 7-я функция выводит изображение снизу вверх справа налево, я не в курсе.
IgorA wrote:
Интересные алгоритмы, когда разгребусь с работой возможно добавлю эти функции в buf2d.
Скоро можно будет написать графический редактор с разными фильтрами.

Буду рад, если кому-нибудь код пригодится.

Author:  0CodErr [ Wed Dec 12, 2012 1:23 pm ]
Post subject:  Re: Дизеринг на фасме

Heavyiron wrote:
Буду рад, если кому-нибудь код пригодится.
Мне уже пригодился:)
Image

Heavyiron, спасибо!

В архиве фильтр, который я попытался прикрутить к своей imgF — вроде работает.

Attachments:
dither for imgF(asm + obj).7z [1.85 KiB]
Downloaded 171 times

Author:  Leency [ Wed Dec 12, 2012 1:41 pm ]
Post subject:  Re: Дизеринг на фасме

Проверил, отлично работает.

Image

0CodErr
Можешь выложить последнюю версию ImgF с этим встроенным фильтром, неудобно каждый раз Browse нажимать, да и мало кто будет знать, что он там есть.
Я хочу добавить программу в автосборку.

Author:  srx [ Wed Dec 12, 2012 6:37 pm ]
Post subject:  Re: Дизеринг на фасме

Heavyiron wrote:
Насчет отражения - даже не знаю. Просто пошел пока самым простым путем - зашиваю в программу уже подготовленный BMP, процедура его обрабатывает и тут же выводится выводится 7-й функцией. Исходное изображение затирается, дополнительный буфер не используется. Почему 7-я функция выводит изображение снизу вверх справа налево, я не в курсе.

Если я правильно понимаю - особенность bmp'шек. там вроде где-то в заголовке записанно в каком порядке идут значения, каждый редактор ставит по-своему. К примеру я тут недавно выводил через эту же функцию bmp созданный в пэинте на семёрке, у меня отображалось перевёрнуто по вертикали, а не по диагонали.

Author:  CleverMouse [ Wed Dec 12, 2012 8:10 pm ]
Post subject:  Re: Дизеринг на фасме

Heavyiron wrote:
На SVN мне уже требуется функция восстановления пароля, давно ничего не заливал и уже успел потерять бумажку, на которой его записывал.

Загляни в личку.

Author:  dunkaist [ Wed Dec 12, 2012 8:20 pm ]
Post subject:  Re: Дизеринг на фасме

Heavyiron wrote:
Насчет отражения - даже не знаю. Просто пошел пока самым простым путем - зашиваю в программу уже подготовленный BMP, процедура его обрабатывает и тут же выводится выводится 7-й функцией.
Я наивно предположил, что используется libimg. А в твоём случае, похоже, srx прав: в bmp изображение зачастую хранится снизу вверх. Использовать bmp в качестве raw не лучшая идея, я сам на это напарывался.

Вообще, если встречаетесь с изображениями, которые неправильно отображаются (или не открываются совсем) в kiv -- не поленитесь прикрепить их в соответствующую тему. Спасибо.

Author:  0CodErr [ Fri Dec 14, 2012 8:00 am ]
Post subject:  Re: Дизеринг на фасме

Heavyiron wrote:
Почему 7-я функция выводит изображение снизу вверх справа налево, я не в курсе.
Это потому что данные изображения в файле так хранятся. Это можно определить по значению Height в структуре BITMAPINFOHEADER. Если файл с изображением содержит не зеркально отражённые данные, то в этом случае Height в BITMAPINFOHEADER записывается со знаком минус. Например, чтобы получить такое изображение в фотошопе надо при сохранении поставить флажок "flip row order".

На некоторых изображениях тот фильтр вылетает. Пример такого изображения в архиве.

IgorA wrote:
...возможно добавлю эти функции в buf2d.
Я думаю, они больше пригодятся в libimg. Например при конвертировании в монохромное изображение. Полученная картинка будет более информативной.

Leency wrote:
Можешь выложить последнюю версию ImgF с этим встроенным фильтром, неудобно каждый раз Browse нажимать, да и мало кто будет знать, что он там есть.

Я же наоборот хотел оставить в меню только часто используемые. Если со временем фильтров будет много, то они просто не поместятся все в меню. Неудобно — это да, ну можно, например, их загружать в меню при запуске, только будет не рационально грузить их все.
Можно временно добавить дизеринг непосредственно в саму программу. Там в архиве было 3 алгоритма — все три добавить?

Attachments:
Archive.7z [71.64 KiB]
Downloaded 161 times

Author:  Leency [ Fri Dec 14, 2012 12:07 pm ]
Post subject:  Re: Дизеринг на фасме

Значит нужно будет делать подменю, если фильтров станет много. Не раз виде такой пункт "Редкие фильтры" - в любом случае в 100 раз удобнее, чем загружать каждый по отдельности.

>Там в архиве было 3 алгоритма — все три добавить?
Если они делают одно и то же, то лучше выбрать оптимальный. Или опять же подменю.

Author:  IgorA [ Fri Dec 14, 2012 9:19 pm ]
Post subject:  Re: Дизеринг на фасме

rev 3105
добавил 3 алгоритма в библиотеку buf2d, сделал пример e8_filters, правда дату в заголовке не поменял на новую
0CodErr wrote:
Я думаю, они больше пригодятся в libimg. Например при конвертировании в монохромное изображение. Полученная картинка будет более информативной.

может быть там они и нужнее, но в случае чего убрать всегда легче чем добавить

Attachments:
File comment: алгоритмы Sierra lite и Burkes
dither.png
dither.png [ 62.74 KiB | Viewed 4995 times ]

Page 1 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/