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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2011, 18:24   #1
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию Уменьшить кол-во цветов (24bit -> 16 colors)

Привет,

Есть 24-битная картинка, допустим, BMP для простоты. Нужно сделать из нее 16-ти цветную (всего доступно 16 цветов). Доступна 16-ти цветная палитра, например такая:
Код:
0x0 - 0x000000 (Black, Transparent in foreground layer)
0x1 - 0x000000 (Black)
0x2 - 0x888888 (Gray)
0x3 - 0xBF3932 (Red)
0x4 - 0xDE7AAE (Pink)
0x5 - 0x4C3D21 (Dark brown)
0x6 - 0x905F25 (Brown)
0x7 - 0xE49452 (Orange)
0x8 - 0xEAD979 (Yellow)
0x9 - 0x537A3B (Green)
0xA - 0xABD54A (Light green)
0xB - 0x252E38 (Dark blue)
0xC - 0x00467F (Blue)
0xD - 0x68ABCC (Light blue)
0xE - 0xBCDEE4 (Sky blue)
0xF - 0xFFFFFF (White)
Как я понимаю, начинать стоит с этого: http://en.wikipedia.org/wiki/Color_quantization и, соответственно, http://en.wikipedia.org/wiki/Dither ?
Но в вики одно, а конкретных примеров маловато. Обычно все к 8-бит сводят (256 цветов), но мне это не подходит. У меня всего 16 цветов (
В принципе, оно более-менее понятно, как делать по самому простому алгоритму (считать ошибки между пикселями), но во избежание изобретения адсокого велосипеда, возможно подтолкнете уже к готовым решениям? Спасибо. Мне не для лабы и не на продакшен, поэтому не брезгаю воспользоваться готовыми либами/компонентами
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 10.08.2011, 18:52   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

В GIFImage уже есть TColorQuantizer, TDitherEngine и т.п.
http://www.google.com/codesearch#sea...pascal&type=cs
и ф-я ReduceColors
пыщь

Последний раз редактировалось JTG; 10.08.2011 в 18:54.
JTG вне форума Ответить с цитированием
Старый 10.08.2011, 18:57   #3
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Вот предлагают на буржуйском форуме решение
http://www.delphigroups.info/2/9/642332.html
или вот тут
http://www.efg2.com/Lab/Library/Delp...hics/Color.htm

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 10.08.2011, 19:16   #4
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от volod3000 Посмотреть сообщение
Вот предлагают на буржуйском форуме решение
http://www.delphigroups.info/2/9/642332.html
Не не, не стоит путать 16-bit color и всего 16 цветов (оно 4-bit получаетсо)
из 24 бит получить 16 бит цвет как два пальца об асфальт, это ежу понятно, но мне не нужно.
Цитата:
Сообщение от volod3000
Видел данную ссылку по гуглю, но увы, опять без конкретики (она есть только для 256-цветов). Мне повторюсь нужно 16 цветов по заданной палитре.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 10.08.2011, 22:47   #5
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Наткнулся на интересную статью по Вашей теме,
думаю там найдете ответ:

http://forum.vingrad.ru/topic-94227.html

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 11.08.2011, 00:20   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Да всё написано уже

Код:
  // ReduceColors
  // Map colors in a bitmap to their nearest representation in a palette using
  // the methods specified by the ColorReduction and DitherMode parameters.
  // The ReductionBits parameter specifies the desired number of colors (bits
  // per pixel) when the reduction method is rmQuantize. The CustomPalette
  // specifies the palette when the rmPalette reduction method is used.
  function ReduceColors(Bitmap: TBitmap; ColorReduction: TColorReduction;
    DitherMode: TDitherMode; ReductionBits: integer; CustomPalette: hPalette): TBitmap;
пыщь
JTG вне форума Ответить с цитированием
Старый 11.08.2011, 10:08   #7
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от volod3000 Посмотреть сообщение
Наткнулся на интересную статью по Вашей теме,
думаю там найдете ответ:

http://forum.vingrad.ru/topic-94227.html
Да чем она интересная-то? Ну формат BMP описан худо-бедно, так я же не про него спрашивал. Как его читать-писать, особенно 24-бит, это все давно понятно. Вы видимо вообще не понимаете, о чем эта тема.

Цитата:
Сообщение от JTG
Да всё написано уже
Я понял, понял, еще из предыдущего вашего поста. Спасибо что подсказали направление, буду разбираться, по результатам отпишусь.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 11.08.2011, 17:48   #8
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

JTG, грацис, все получилось отлично.
Изображения
Тип файла: jpg chip16conv1.jpg (114.2 Кб, 56 просмотров)
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уменьшение кол-ва цветов (Мозаика) mutabor Общие вопросы Delphi 3 29.01.2010 15:32
макрос - подсчитать для каждой строки кол-во ячеек с «+», кол-во ячеек с «-» Vadim_abs Microsoft Office Excel 36 14.07.2009 12:08
Найти кол-во целых чисел в первой последовательности и кол-во нечетных во второй. DjDeniels-61 Помощь студентам 7 28.06.2009 13:04
Как уменьшить количество цветов в рисунке? HELP!!! risya Мультимедиа в Delphi 0 03.06.2009 19:44
Помогите определить макс кол цветов картинки 32x32 пикс объёмом 512 байт www_2008 Паскаль, Turbo Pascal, PascalABC.NET 4 13.05.2008 20:25