![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция извлечения цветов из BMP в массив [D7, WinXP]
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);