Форум: "Media";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизПалитра Найти похожие ветки
← →
Radgar © (2005-07-01 14:02) [0]Подскажите, пожалуйста, как узнать палитру у определенного пикселя TImage, в таком формате Red - xxx, Blue - xxx, Green -xxx.
← →
Alexander Panov © (2005-07-01 14:39) [1]А что такое палитра у пикселя?
← →
Анонимщики © (2005-07-01 14:46) [2]Зря я тебе порекомендовал к поисковым серверам обратиться.
Читай хелп по графике, пока что-нибудь не поймешь.
А палитру имеет (может иметь) не отдельный пиксел, а все изображение в целом.
Смотри. Есть, предположим, графический файл, скажем, для простоты, bmp. У него в заголовке записано, какой формат имеют пикселы (отдельные точки) этой картинки. Картинку может иметь палитру - это индексированная, точнее, нумерованная, таблица элементов, каждый элемент которой имеет номер и соответствующие ему значения - R (red), G (green) и B (blue), все - от 0 до 255; сколько таких элементов - вопрос третий. В той области файла, где хранятся данные, хранятся вместо троек (R, G, B) индексы палитры - так компактнее.
Но картинка может палитры и не иметь, тогда указывается не индекс элемента палитры, а сама тройка.
При отображении в TImage ты можешь получить каждый цвет каждой точки через TImage.Picture.Bitmap.Canvas.Pixels[X, Y] - результат будет типа TColor; при этом тип витмэпа (HandleType) должен быть DIB. Доступаться таким образом по очереди к каждой точке неэффективно, гораздо лучше использовать ScanLine битмэпа (тебе это будет делать проще всего при 24 битах на пиксел). Чтобы, затем, получить значения R, G и B, нужно будет вызвать функции GetRValue, GetGValue и GetBValue.
Читай хелп по:
TImage, TPicture, TBitmap, TCanvas, TColor.
← →
Radgar © (2005-07-01 14:56) [3]Анонимщики ©
> гораздо лучше использовать ScanLine битмэпа
Посоветуй что лучше сделать, если мне надо считать R G B при OnMouseDown.
← →
Digitman © (2005-07-01 16:05) [4]
> при OnMouseDown
при OnMouseDown тебе известны X и Y
дальше - см. [2]
← →
uny © (2005-07-01 19:20) [5]tcolor это 32 бита, а не 24, старший байт это номер палитры.
← →
Магнитон Борыч (2005-07-03 17:32) [6]> uny © (01.07.05 19:20) [5]
> tcolor это 32 бита, а не 24, старший байт это номер палитры.
Ты не выспался что ли? Какой номер палитры? :))
> Radgar © (01.07.05 14:56) [3]
> Посоветуй что лучше сделать, если мне надо считать R G B при OnMouseDown.
var C: TColor;
R, G, B: Byte;
begin
C := TImage.Canvas.Pixels[X, Y];
R := Lo(C);
G := Lo(C shr 8);
B := Lo((C shr 8) shr 8);
end;
← →
Virgo_Style © (2005-07-03 21:36) [7]Магнитон Борыч (03.07.05 17:32) [6]
R := Lo(C);
G := Lo(C shr 8);
B := Lo((C shr 8) shr 8);
Мне кажется, лучше использовать GetRValue, GetGValue, GetBValue - так красивше =)
← →
Магнитон Борыч (2005-07-04 17:59) [8]> Virgo_Style © (03.07.05 21:36) [7]
Мне кажется, лучше использовать GetRValue, GetGValue, GetBValue - так красивше =)
но дольше.
← →
uny © (2005-07-04 18:31) [9][6] Магнитон Борыч (03.07.05 17:32)
там же если системная палитра, то одна цифра, если другая палитра - и цифра тоже другая. в справке написано. чем не номера?)
← →
Магнитон Борыч (2005-07-04 21:58) [10]uny © (04.07.05 18:31) [9]
Всё ясно :))
← →
uny © (2005-07-05 12:32) [11]Магнитон Борыч (04.07.05 21:58) [10]
я для этой функции выяснил что значит байт 0. если tcolor
1,2,3 - b,g,r
может моя быстрее ;)
function divdw(dwme:longword; he:byte):byte;
asm //0 1 2 3
mov ecx,eax
cmp dl,0
je @@1
shl ecx,8
cmp dl,1
je @@1
shl ecx,8
cmp dl,2
je @@1
shl ecx,8
@@1: shld eax,ecx,8
end;
← →
Virgo_Style © (2005-07-05 16:10) [12]Магнитон Борыч (04.07.05 17:59) [8]
но дольше.
В принципе, я об этом подозревал... Но тогда Pixels[] тем более нельзя использовать.
← →
Магнитон Борыч (2005-07-05 20:35) [13]> Virgo_Style © (05.07.05 16:10) [12]
> Но тогда Pixels[] тем более нельзя использовать.
В циклах..
← →
Virgo_Style © (2005-07-06 08:57) [14]Магнитон Борыч (05.07.05 20:35) [13]
На мой взгляд, если важнее простота и удобство, то Pixels и Get..Value, если скорость - то ScanLine и математика, а смешивать их...
В общем, дело вкуса %-)
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c