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

Вниз

TColor   Найти похожие ветки 

 
hgd   (2005-02-28 17:33) [0]

Скажите правильно ли, что вычисление значение типа TColor = R + G + B (+ = объединение значений) и перевод в 10 форму счисления?

тоесть R = G = B = 72

TColor = (484848) = 4737096, верно?


 
TUser ©   (2005-02-28 17:44) [1]

Нет. Надо shl 8 и 16 делать.


 
}|{yk ©   (2005-02-28 17:53) [2]

В WinAPI есть функция RGB.


 
palva1   (2005-02-28 17:55) [3]

А вообще функция такая есть RGB


 
Anatoly Podgoretsky ©   (2005-02-28 17:59) [4]

hgd   (28.02.05 17:33)  
Скажите правильно ли, что вычисление значение типа TColor = R + G + B

При указанном равенстве состовляющих, равносильно 72*3


 
Хинт ©   (2005-02-28 18:06) [5]

Можно так:
type
TRGB=record
  R,G,B,Temp:byte;
  end;
var
RGB:TRGB;
begin
...
RGB:=TRGB(BMP.Canvas.Pixels[x,y]);
...
end;


Или написать:
Color:TColor;
RGB:TRGB absolute Color;


 
hgd   (2005-02-28 18:19) [6]

Да меня вообщем то больше интересует теория, КАК в TColor сидит RGB?


 
Zeqfreed ©   (2005-02-28 18:27) [7]

hgd   (28.02.05 18:19) [6]

Windows.pas

function RGB(r, g, b: Byte): COLORREF;
begin
 Result := (r or (g shl 8) or (b shl 16));
end;


(C) Borland Software Corporation


 
Просто Джо ©   (2005-02-28 18:28) [8]


> Да меня вообщем то больше интересует теория, КАК в TColor
> сидит RGB?


Три младших байта отвечают за интенсивность составляющих R, G и B:

If you specify TColor as a specific 4-byte hexadecimal number instead of using the constants defined in the Graphics unit, the low three bytes represent RGB color intensities for blue, green, and red, respectively. The value $00FF0000 represents full-intensity, pure blue, $0000FF00 is pure green, and $000000FF is pure red. $00000000 is black and $00FFFFFF is white.

Самый старший байт отвечает за палитру:

If the highest-order byte is zero ($00), the color obtained is the closest matching color in the system palette. If the highest-order byte is one ($01), the color obtained is the closest matching color in the currently realized palette. If the highest-order byte is two ($02), the value is matched with the nearest color in the logical palette of the current device context.

(с) Справка по типу TColor.


 
Просто Джо ©   (2005-02-28 18:30) [9]

То есть, отбросив старший байт из значения типа TColor получишь просто цвет RGB без данных о палитре.


 
Sphinx   (2005-02-28 18:39) [10]

Хотелось бы напомнить, что "хитрый" Борланд "пошутил" и поменял в TColor биты R и B местами, поэтому просто> отбросив старший байт из значения типа TColor получается BGR цвет :)


 
Sphinx   (2005-02-28 18:43) [11]

> The value $00FF0000 represents full-intensity, pure blue,
> $0000FF00 is pure green, and $000000FF is pure red.

Что и подтверждает мои слова...


 
Anatoly Podgoretsky ©   (2005-02-28 20:46) [12]

hgd   (28.02.05 18:19) [6]
В TColor не сидит RGB, только как частный случай. Для получения RGB надо использовать функцию ColorToRGB


 
Sergey_Masloff   (2005-02-28 22:12) [13]

}|{yk ©   (28.02.05 17:53) [2]
>В WinAPI есть функция RGB.
Функции от макросов отличаем? ;-)


 
Просто Джо ©   (2005-02-28 22:45) [14]


> [11] Sphinx   (28.02.05 18:43)


Хм... Действительно, век живи, век учись. Борланд хитер, однако.


 
Anatoly Podgoretsky ©   (2005-02-28 23:05) [15]

Sphinx   (28.02.05 18:39) [10]
Борланд не шутил, ты просто путаешь Integer c array of byte



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

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

Наверх




Память: 0.49 MB
Время: 0.073 c
1-1109236934
X9
2005-02-24 12:22
2005.03.13
Трабла со сворачиванием


6-1104670234
volser
2005-01-02 15:50
2005.03.13
Мониторинг http


9-1102772405
malij
2004-12-11 16:40
2005.03.13
GlScene


4-1107237777
sergeiA
2005-02-01 09:02
2005.03.13
CreateThread-очередной глупый вопрос


3-1108387216
Polad
2005-02-14 16:20
2005.03.13
Interbase + Loockup =?