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

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

Поиск цвета на битмапе


novichek ©   (2012-04-12 20:55:00) 

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

сделал поиск нужного цвета  типа:
разлаживаю нужный TColor на на цвета ColorR(G,B)
сканирую битмап и проверяю на свой цвет

result:= (BMPLine[x].rgbRed = ColorR) or (BMPLine[x].rgbGreen = ColorG) or (BMPLine[x].rgbBlue = ColorB);

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

попробывал сделать что-то типа:
 const
   myABS = 5;

result:= (abs(BMPLine[x].rgbRed - ColorR) < myABS) and (abs(BMPLine[x].rgbGreen - ColorG) < myABS) and (abs(BMPLine[x].rgbBlue - ColorB) < myABS);

думал так же буду отлавливать цвет который рядом где то, но нифига.
после смены например красного цвета по краям все равно видны почти красный цвет.

подскажите пожалуйста, как можно отловить рядом расположенные цвета?  не знаю как правильно сказать, но думаю что поняли... :)


novichek   (2012-04-12 23:24:00) [1]

Омлет © Спасибо! Ваше решение оказалось самое оптимальное...


novichek   (2012-04-12 22:33:00) [2]

Омлет ©, спасибо сейчас попробую!
проверю только вариант через beginpath.. fillpath с контуром в пиксель.
может он не размоет цвет текста..


Омлет   (2012-04-12 22:27:00) [3]


> novichek   (12.04.12 22:13) [7]

Нужно просто рисовать 2 варианта - в изначальном цвете на конечную картинку, а другим цветов - в памяти (во временном растре), но тем же шрифтом и размером. Затем просто копировать часть временной картинки на конечную, ограничивая нужным x - получится эффект перекрашивания.


novichek   (2012-04-12 22:26:00) [4]

Jeer ©, не хочется вам хамить, но вы мудила ещё тот!


Jeer   (2012-04-12 22:21:00) [5]


> похожее на закраску текста в караоке.


Я-то, думал, что караоке - это там, где поют, а оказывается - там текст закрашивают. Да и то - какие сейчас тексты.


novichek   (2012-04-12 22:13:00) [6]

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

заранее спасибо!


Омлет   (2012-04-12 22:07:00) [7]

> что значит пересмотреть задачу?

Ну вот вы пишете "в режиме transparent я рисую разным цветом разный текст." - если вы сами рисуете, то и координаты можете запомнить, а не просто цвет? Лучше опишите изначальную задачу, что и зачем.


Dimka Maslov   (2012-04-12 21:52:00) [8]

В целом даже фотошоп при замене цвета иногда ошибается по краям. Решений проблемы может несколько:
1. Векторизация - картинка каждый раз перерисоывается полностью в новом цвете.
2. Переход из цветового пространства RGB в цветовое пространство HSL, там проще выделять и менять "похожие цвета".


novichek   (2012-04-12 21:39:00) [9]

ну а вообще, еасли есть два цвета: TColor1  и TColor2
как определить TColor3 к какому цвету ближе относиться к 1 или 2?
в целом алгоритм какой?
проверять разницу в каждом цвете и в сумме где эта разница будет меньше значит ближе.. так?


novichek   (2012-04-12 21:34:00) [10]

что значит пересмотреть задачу?
задача одна.
есть у меня битмап с отрисованным текстом.
мне нужно изменить цвет один на другой.
значит я неверно думал что это тривиальная задача найти примерно похожие цвета ..


Омлет   (2012-04-12 21:26:00) [11]

Текст рисуется со сглаживанием, которое установлено в системе.
Лучше пересмотрите задачу и методику решения.


Jeer   (2012-04-12 21:25:00) [12]


> как можно отловить


Более не привередливой "мышеловкой".


Наверх

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