Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.07.2010, 11:04
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию Цветовая палитра

Пролистав сотню статей на эту тему, так и не нашел ответ на свой вопрос: "как получить массив цветов Цветовой Палитры, для конкретного Битмапа?" , не цвета, которые на нем нарисованны, а цвета палитры, которую он использует.

например, чтоб заполнился массив
Colors:array{R} of array{G} of array{B} of boolean;
в котором true будет означать, что в данной цветовой паллитре используется этот цвет)
Ответить с цитированием
  #2  
Старый 30.07.2010, 12:04
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

Не совсем понятен вопрос... Тебя интересует получение уникальных цветов в изображении или преобразование в палитру 256 цветов?
Если первое, то ты в общем сам себе ответил. Правда вариант с таким массивом затратный по используемой памяти, для 24 бит RGB еще терпимо, а вот для 32 бит RGBA такой вариант уже не пременим т.к. требует массив около 4 гигабайт. Можно рассматривать изображение как массив, достаточно выполнить сортировку и откинуть повторяющиеся цвета. Правильней всего использовать дерево, идеально подойдет октодерево, реализация будет сложней, зато расход памяти и скорость будут оптимальными.
Ответить с цитированием
  #3  
Старый 30.07.2010, 12:12
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

каждое изображение в формате Bitmap имеет pixelformat, отвечающий, за цвета которые могут использоваться в текущем Bitmapе, не факт, что на нем все они изображены, поэтому пройтись по нему попикслено будет бесполезно, в зависимости от pixelformatа Палитра bitnapа может иметь нное количество возможных цветов
1 = 2 colors
4 = 16 colors
8 = 256 colors
15 = 32768 colors
16 = 65535 colors
24 = 16,777,216 colors
32 = 16,777,216 colors (то же, что и 24)
так вот, мне нужно получить сами эти цвета, а вопрос в том, "как?"
Ответить с цитированием
  #4  
Старый 30.07.2010, 13:12
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

ты не совсем правильно понимаешь понятие "палитра", смотри описание формата BMP.
Цитата:
В зависимости от количества представляемых цветов, на каждую точку отводится от 1 до 48 битов:
1 бит — монохромное изображение (два цвета).
2 бита — 4 возможных цвета (режимы работы CGA).
4 бита — 16-цветное изображение (режимы работы EGA).
8 бит (1 байт) — 256 цветов, последний из режимов, поддерживавших индексированные цвета (см. ниже).
16 бит (2 байта) — режим HiColor, 65536 возможных оттенков.
24 бита (3 байта) — TrueColor. В связи с тем, что 3 байта не очень хорошо соотносятся с степенями двойки (особенно при хранении данных в памяти, где выравнивание данных по границе слова имеет значение), вместо него часто используют 32-битное изображение. В режиме TrueColor на каждый из трёх каналов (в режиме RGB) отводится по 1 байту (256 возможных значений), общее количество цветов равно 16777216.
32 бита (4 байта) — этот режим практически аналогичен TrueColor, четвёртый байт обычно не используется, или в нём располагается альфа-канал (прозрачность).
48 бит (6 байт) — редко используемый формат с повышенной точностью передачи цвета, поддерживается относительно малым количеством программ и оборудования.
Цитата:
При количестве бит от 1 до 8 на каждый пиксел может использоваться специальный режим индексированных цветов. В этом случае число, соответствующее каждому пикселу, указывает не на цвет, а на номер цвета в палитре. Благодаря использованию палитры имеется возможность адаптировать изображение к цветам, присутствующим на изображении. В таком случае изображение ограниченно не заданными цветами, а максимальным количеством одновременно используемых цветов.
Изображения с pixelformat более 8 бит палитры не имеют, для того чтобы узнать какие цвета реально используются, нужно выполнить действия о которых я писал раньше.
Ответить с цитированием
  #5  
Старый 30.07.2010, 13:46
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

правильно ли я понял, что в изображениях больше 8 бит палитра формируется из цветов, пикселей изображения?
Ответить с цитированием
  #6  
Старый 30.07.2010, 14:01
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

Все верно, в изображениях которые имеют более 8 бит на пиксел, каждый отдельный пиксел несет информацию о цвете, для 24 бит это три байта на пиксел r, g и b.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter