Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Индексированные палитры

Страницы: 1
Индексированные палитры
Вобщем создаю свой формат изображения =)
Нужно использовать индексированную палитру.
Палитра может вмещать в себя 256 различных цвета из 16 млн цветов.

Если в исходном изображении менее 256 цветов, то все понятно, изображение сохранится в мой формат без потерь.
А вот если их все же больше.. Как мне поступить в этом случае, как выбрать те цвета которые войдут в палитру ну и соответственно как рисовать те пиксели цвета которых нет в новой палитре?

Можно ссылками на ресурсы где это более менее разжевано, можно на английском языке. Сам ищу но ничего пока толком не нашел.
Помогите!)
По этой статье можно разобраться, как составить такую палитру.
ru.wikipedia.org/wiki/8-битный_цвет
Изменено: Andrew Ivanov - 23.10.2010 17:59:53
Ну не знаю, в этой статье очень мало и все поверхностно описано, ни слова о реализации...
Пока как вариант думаю о
6×6×6 (палитра Netscape)- но это самый простой вариант, суть его заключается в том что эта палитра может использоваться для любого изображения, т.е. она универсальная, но качество передачи цвета очень плохое.
А лучше было бы если бы для каждого изображения составлялась бы своя палитра... вот такой алгоритм надо найти, хотя бы словесно..
Я бы сделал так: определил, какой цвет чаще всего встречается на картинке, занёс бы этот цвет в палитру с индексом 0. Потом определил второй по частоте цвет, присвоил бы ему индекс 1. И так далее до 255. Таким образом палитра будет представлять собой массив из 256 элементов, каждый размером 3 байта (truecolor).
Цвета на картинке, которых нет в палитре, будут заменены ближайшим цветом из палитры.
Попробую как ты сказал.
Но вот только может возникнуть такая ситуация, Например в рисунке присутствует градиент от белого к красному и занимает к примеру пол рисунка, и использованы все оттенки от RGB(255,255,255) до RGB(255,0,0) 256 оттенков, а в другой части рисунка чтобы мы уже ни рисовали, оно скорее всего будет в розовых тонах.
Изменено: rozpants - 24.10.2010 09:48:42
Можно, когда определяешь, какие цвета есть на картинке, установить определённый допуск. Например, RGB(r+-d, g+-d, b+-d), т. е. любой цвет, компоненты которого отличаются от соответствующих компонент r,g,b не более чем на d, будет считаться одним и тем же цветом RGB(r, g, b).
И для всех таких цветов в палитру будет помещён только один цвет.
Величина допуска должна определяться опытным путём.
Но тогда когда будет сохраняться картинка на котором опять же градиент от белого к красному с 256ю оттенками, имея возможность составить палитру со всеми 256ю оттенками, будет составлена такая палитра в которой будет меньше оттенков и рисунок будет ступенчатым, хотя мог бы быть передан полностью =)
Тогда программа должна перебирать все возможные допуски от 0 до ... и на каждом этапе анализировать, не остались ли цвета, для которых нет точного соответствия в палитре. Если такие цвета есть, то для каждого из них определяется расстояние от этого цвета до ближайшего в палитре. Если это расстояние больше некоторого допустимого (заданного разработчиком заранее), увеличиваем значение допуска на единицу. И так, пока не получим приемлемый результат.
smile:D
Хм, пока не могу ни к чему подкопаться =) Надо попробовать)
Вообще эта задача тесно связана со сжатием изображения.
Можешь почитать про алгоритм преобразования в JPEG. Есть подозрение, что там заложены подобные идеи.
в ДЖЕПЕГЕ, думаю врядли, инд. палитра используется в Gif, png, tiff,... и в самих этих форматах не содержится то как составлять палитру, они просто хранят ее, а составляют палитру те программы которые конвертируют изображения из других форматов в данные, и алгоритмы у всех разные.

Сделал так как ты сказал, все норм.
Изменено: rozpants - 27.10.2010 17:47:17
Рад что всё получилось.
Суть моей идеи состояла в том, что снижение глубины цвета, также как алгоритм JPEG, являются примерами сжатия данных с потерями.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)