Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Поиск цвета на битмапе   Найти похожие ветки 

 
novichek   (2012-04-12 20:55) [0]

Подскажите пожалуйста, есть битмап.
в режиме 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);

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

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


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


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


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


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

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


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

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


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

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


 
Dimka Maslov ©   (2012-04-12 21:52) [5]

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


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

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

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


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

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

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


 
Jeer ©   (2012-04-12 22:21) [8]


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


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


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

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


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


> novichek   (12.04.12 22:13) [7]

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


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

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


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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.084 c
15-1337598756
p
2012-05-21 15:12
2013.03.22
Сертификат Verisign


2-1335171988
andrewtitoff
2012-04-23 13:06
2013.03.22
IdHTTP и Proxy


2-1338711145
Разветка
2012-06-03 12:12
2013.03.22
как заставить выполнить полность все условия


15-1341390679
alexdn
2012-07-04 12:31
2013.03.22
Индексация припаркованного домена


15-1350592203
Юрий
2012-10-19 00:30
2013.03.22
С днем рождения ! 19 октября 2012 пятница





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский