Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция извлечения цветов из BMP в массив [D7, WinXP]


Страницы:   1 2 3

lyberzon ©   (2006-08-02 16:43:00) 

Привет всем!!! Ребят, подскажите плз., функцию извлечения цветовой палитры из картинки в массив, например, из элементов ТColor. Нигде не могу найти такого. Может плохо искал?


Jeer   (2006-08-04 11:53:00) [21]

Зачем ?
Справку лень читать ?
набираешь в редакторе scanline
выделяешь и нажимаешь F1
Перед тобой окажется "живой" код от Borland


Lyberzon   (2006-08-04 11:51:00) [22]

Да меня и это устраивает. Просто ни кто не хочет воочию показать, как это реализовать, то-есть живым примером кода.


Jeer   (2006-08-04 11:29:00) [23]

Расскажи лучше, чем тебя 20 ms не устраивают.


Lyberzon   (2006-08-04 10:58:00) [24]

Вот и я о том же. Ребят, может поможете живым примером? Буду очень благодарен.


Cash   (2006-08-03 20:13:00) [25]

lyberzon:
ScanLine конечно! он тебе вернет массив линии из картинки (строки по
моему...).
А там простым проходом по элементам вытягивай цвета и смотри.

Товарищ, а у вас алгоритм быстрой проверки наличия цвета есть? Простой
перебор не решит проблему за требуемое время!


Lyberzon   (2006-08-03 17:47:00) [26]

Спасибо. Вечером попробую...


Jeer   (2006-08-03 17:26:00) [27]


> как Вы думаете.


Не суть.

Важно, чтобы ты начал думать

F1 scanline

В help-e развернутый пример.

1024x768 сканируется за 20 ms на P-IV 2 GHz


lyberzon   (2006-08-03 16:47:00) [28]

Прошу прощения, ...как Выдумаете...?


lyberzon   (2006-08-03 16:46:00) [29]

Ну а как с помощью scanline? Мне бы желательно код-пример. Jeer, как думаешь, за сколько времени предлагаемая реализация просчитает цвета картинки размером 1600Х1200?


Jeer   (2006-08-03 16:36:00) [30]

Повторю - scanline ?

А алгоритм прост до неприличия:
если цвет = искомый, то цвет := выбранный


lyberzon   (2006-08-03 16:09:00) [31]

Итак, я загружаю BMP из файла. На специальной панели отображается палитра цветов (все те цвета, из которых и состоит изображение). Я сликаю мышкой по любому цвету на панели, открывается диалог выбора цвета. Я выбираю другой цвет, и на изображении исходный цвет меняется на выбранный. Как это реализовать без использования TBitMap.Pixels[x,y: integer]?


Jeer   (2006-08-03 15:44:00) [32]

так и непонятно, с чем проблемы - выяснить TColor пикселя или разработка собственного алгоритма сравнения чего-то с чем-то ?


lyberzon   (2006-08-03 15:41:00) [33]

Я имел ввиду сканирование пикселей и сравнение их с уже занесенными в массив (если цвет текущего пикселя уже был однажды занесен в массив, то этот осуществляется переход к следующему и т.д.)


antonn   (2006-08-03 15:28:00) [34]

Lyberzon ©   (03.08.06 15:15) [6]
Простое сканирование пикселей типа TBitMap.Pixels[x,y: integer]: TColor отпадает - чрезвычайно медленно. Необходимо что-то, что работало бы побыстрей.

[2] ?


Lyberzon   (2006-08-03 15:22:00) [35]

Например я заменяю желтый цвет на красный в массиве, а дальше специальная процедура путем сканирования и сравнения текущего цвета пикселя с заменяемым, заменяла бы этот желтый цвет на красный везде, где встречается желтый.


Lyberzon   (2006-08-03 15:15:00) [36]

Привет всем! Извиняюсь за долгое отсутствие. Был несказанно рад, когда увидел, что на мою просьбу откликнулись целых 4 человека.

Теперь по существу. Мне нужно извлечь из BMP задействованные цвета в массив с тем, чтобы потом я мог по выбору заменить любой выбранный цвет в картинке на другой. А с извлечением имеющейся палитры, я думаю, связываться бесполезно, т.к. некоторые форматы BMP ее не имеют. При этом алгоритм должен быть достаточно быстрым. Простое сканирование пикселей типа TBitMap.Pixels[x,y: integer]: TColorотпадает - чрезвычайно медленно. Необходимо что-то, что работало бы побыстрей.


Степан   (2006-08-02 21:00:00) [37]

Я кажется нашел! Тебе надо в строну функции GetPaletteEntries рыть! Она на основе дескриптора палитры (Bitmap.Palette, так в Делфи помоему) выдает массив с ее содержимом, подробнее описано в MSDN (Windows SDK) -> Colors Overview


Virgo_Style   (2006-08-02 19:49:00) [38]

м.б. требуется извлечь из bmp данные об использованной палитре?


Cash   (2006-08-02 17:34:00) [39]

... или для получения TColor из BMP??? (мне и самму не верится, но
мога-быть и такое)

TBitMap.Pixels[x,y: integer]: TColor, мога такое.


antonn   (2006-08-02 17:18:00) [40]

отдельно RGB из TColor?
var r, b, g:byte;
begin
r:=GetRValue(trColor); g:=GetGValue(trColor); b:=GetBValue(trColor);

или

r:=Byte(trColor);
g:=Byte(trColor shr 8);
b:=Byte(trColor shr 16);


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо