Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2019, 15:32   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию ImageMagick 16 цветов из 256

Доброго времени суток!

Нужно с использованием ImageMagick преобразовать bmp 24bpp или 32bpp к 16 из 256 цветов палитры 332 RGB (3 бита RG и 2 бита B). Так как опыта работы с графикой у меня мало, чтение инструкций к ImageMagick положительного результата не дало. Прошу помощи.
Как это лучше сделать? Интересует нахождение одного (или пары) "универсального" алгоритма. Или подскажите где искать решение. Что бы тема была относительно разжёвана, для чайников вроде меня. Вот здесь написано много, но это только запутывает, так как не хватает банальных знаний и опыта для понимания, что из этого нужно взять.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 11.02.2019, 17:57   #2
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Удалось чуточку разобрать. Но результат получается хуже чем в фотошопе, при чем значительно. Кроме того не удалось сохранить в bmp 4 бита.
Есть среди нас опытные люди?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.02.2019, 10:11   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Вопрос закрыт.
Конверсия в 16 цветов из 256 палитры 332RGB происходит так
Код:
magick convert s12001.bmp -normalize -dither FloydSteinberg -remap colormap_332.png -colors 16 332_001.bmp
где
s12001.bmp - имя исходного файла
332_001.bmp - имя файла для результат
colormap_332.png - файл с палитрой. Берется из статьи в первом сообщении. В теории можно и без него (заменить на "-ordered-dither threshold,8,8,4"), но с ним результат значительно лучше.
FloydSteinberg - метод для дизеринга. Можно поиграться (всего их три), но этот в большинстве случаев оптимальный.

Пробовал применять различные фильтры (описанные в других статьях) но эффекте нет. Скорее всего он убиваться при переходе к 16 цветам. Это и понятно, но я наделся влиять на видимость мелких деталей (меняя светлость и резкость исходного изображения).

На выходе BMP 4bpp (в байте два пикселя) с палитрой. Цвета в палитре произвольном порядке, тогда как фотошоп всегда на первое место помещает самый темный (обычно черный), на второе самый светлый (обычно белый). Очень удобно. Интересно можно ли такое настроить в ImageMagick?

Осторожнее при чтении заголовка, он там сильно "правильный", по началу моя программа не правильно его читала (от фотошопа ни каких проблем).

Результат несколько отличный от фотошопа. Более размытый, часть деталей пропадают, но за-то более плавные линии. Тогда как в фотошопе цветовые переходы более резкие, за счет чего видно больше деталей, но линии получаются более угловатые.
С уважением, Алексей.

Последний раз редактировалось tae1980; 12.02.2019 в 10:21.
tae1980 вне форума Ответить с цитированием
Старый 12.02.2019, 10:23   #4
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Есть среди нас опытные люди?
Да тут не в опыте дело, а в целесообразности.

Мне вот проще самому написать программу, которая будет из 24bpp или 32bpp делать 4 или 8bpp, чем разбираться с чужой ImageMagick.
Тем более по времени это займет минут 10, и размер итоговой программы будет раз в 10 меньше, чем ImageMagick.
kvitaliy вне форума Ответить с цитированием
Старый 12.02.2019, 10:34   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Да тут не в опыте дело, а в целесообразности.

Мне вот проще самому написать программу, которая будет из 24bpp или 32bpp делать 4 или 8bpp, чем разбираться с чужой ImageMagick.
Тем более по времени это займет минут 10, и размер итоговой программы будет раз в 10 меньше, чем ImageMagick.
Основанная проблема тут в алгоритмах. Я не художник, не специалист по графике. Базы нет, опыта нет. Ищу статьи в инете, в пытаюсь разобраться как могу. Но часть материала либо фигня, либо для "умных и опытных", а я понимаю через слово-два. Так что буду очень рад если поможете написать подобную программу. Тем более что конечная задача, ещё сложнее, в результате нужно получить изображение где только два цвета из 16 на каждые 8 точек (1 байт). Вот тут ещё один геморрой. Ни чего подобного в инете я не видел. Есть готовые программы решающие схожие задачи (но они по разным причинам не подходят), а вот статей и иного материала нет.

Буду благодарен любой помощи.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.02.2019, 13:04   #6
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Тем более что конечная задача, ещё сложнее,
Вот в том то и дело. Стандартная задача решается стандартными методами, и потому, сохранить в bmp 4 бита это написать за 10 минут.
Для решения вашей задачи нужно как минимум подробное её описание, без смены задания "на лету". Согласитесь, что ваша тема "16 цветов из 256" это одно, а вот "два цвета из 16 на каждые 8 точек" это совсем другое.
Хотя бы есть пример исходного изображения и того, что должно получиться в результате?
kvitaliy вне форума Ответить с цитированием
Старый 12.02.2019, 14:29   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Вот в том то и дело. Стандартная задача решается стандартными методами, и потому, сохранить в bmp 4 бита это написать за 10 минут.
Для решения вашей задачи нужно как минимум подробное её описание, без смены задания "на лету". Согласитесь, что ваша тема "16 цветов из 256" это одно, а вот "два цвета из 16 на каждые 8 точек" это совсем другое.
Хотя бы есть пример исходного изображения и того, что должно получиться в результате?
Eсть компьютер Spectrum Profi на z80. У него расширены экран 512х240 16 цветов из 256 палитры 332rgb.
При этом графика в нем описываться 1 байт = 8 точек + 1 байт атрибут (два цвета).
Нужно написать программу переноса графики с IBM PC.
Так как я чайник в графике, начал решать задачу по пути наименьшего сопротивления, переводить к 16 цветам в продвинутых программах, а своей только делать перенос в формат Profi (grf).

Вот пока такие результаты (к сожалению не нашел в редакторе коды для того, что бы спрятать).
Видно наличие горизонтальных линий (линейность), это те 8 точек (1 байт) в которых было 3 и более цвета, и в процессе обработки они слелись в один. Хотелось бы избавиться от этого эффекта. Например, фигурки людей у основания здания при работе с ImageMagick вообще размылись.
С уважением, Алексей.

Последний раз редактировалось tae1980; 12.02.2019 в 17:44.
tae1980 вне форума Ответить с цитированием
Старый 12.02.2019, 18:00   #8
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
по пути наименьшего сопротивления
А взять готовую программу? Я в Спектрумах не спец, но вроде тема изучена нуждающимися вдоль и поперёк, всяких конвертеров по запросу вылазит не менее десятка. Не уж то нет нужного?
kvitaliy вне форума Ответить с цитированием
Старый 12.02.2019, 18:56   #9
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
А взять готовую программу?
Если бы была готовая программа, я бы её взял. Таких нет. Смысл "умничать" и заходить не на "свою территорию"?
А графика нужна для других проектов.

Анализ готовых программ в общем показывает, что задача решаема и решена для режима "два цвета на 8х8 точек". Но вот ни где не описания как это достичь. А в статьях про ПС информации о работе только с целой картинкой. Попытка их адаптации и реализации провалилась, результат без слез не взглянешь. Буду пытаться курить дальше.

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Я в Спектрумах не спец, но вроде тема изучена нуждающимися вдоль и поперёк, всяких конвертеров по запросу вылазит не менее десятка. Не уж то нет нужного?
На самом деле конвертеров менее 10 шт (как минимум доступных для скачивания). Реально пригодных к работе ещё меньше.
Те что есть имеют целый ряд ограничений, не позволяющих их использовать (в данном случае). Например, все жмут под экран 256х192, а мне нужны файлы любого размера, ни одна программе не сохраняет в формат grf (а их как выяснилось два вида (ATMщики постарались), чего я вообще не ожидал) и прочее (перечислять результат двух недельного анализа имеющегося софта, долго).
Я положил глаз на один интересный редактор графики на ПС, но там можно только создать и отредактировать изображение. Хочу использовать его для доводки, но grf он то же не знает.

Так что особого выбора нет - нужно решать проблему своими силами.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.02.2019, 21:14   #10
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Так что особого выбора нет - нужно решать проблему своими силами.
Ну ясно.
kvitaliy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть n цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит lesha18 Паскаль, Turbo Pascal, PascalABC.NET 1 26.02.2013 16:54
ImageMagick. Конвертирование pdf в jpg. JuniorProger PHP 0 23.09.2012 01:22
ImageMagick и формат DDS J-Max PHP 1 26.08.2012 14:01
Вопрос по ImageMagick ALьT PHP 0 09.11.2011 15:00
Помогите с ImageMagick SENTINEL Мультимедиа в Delphi 1 01.02.2009 06:55