Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Палитра   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
9-1121172680
Trof
2005-07-12 16:51
2005.11.27
Poser и анимация.


14-1131447395
Гамлет
2005-11-08 13:56
2005.11.27
Выложите, пожалуйста, deepbase.gdb


2-1131365116
Wolferio
2005-11-07 15:05
2005.11.27
ShellTreeView


3-1129265006
kvi
2005-10-14 08:43
2005.11.27
ограничение на число полей в таблицах paradox


1-1130837427
kyn66
2005-11-01 12:30
2005.11.27
Анимация виснет во время процесса.