![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TColor [D7]
hgd © (2005-02-28 17:33:00)Скажите правильно ли, что вычисление значение типа TColor = R + G + B (+ = объединение значений) и перевод в 10 форму счисления?
тоесть R = G = B = 72
TColor = (484848) = 4737096, верно?
Anatoly Podgoretsky (2005-02-28 23:05:00) [1]Sphinx (28.02.05 18:39) [10]
Борланд не шутил, ты просто путаешь Integer c array of byte
Просто Джо (2005-02-28 22:45:00) [2]
> [11] Sphinx (28.02.05 18:43)
Хм... Действительно, век живи, век учись. Борланд хитер, однако.
Sergey_Masloff (2005-02-28 22:12:00) [3]}|{yk © (28.02.05 17:53) [2]
>В WinAPI есть функция RGB.
Функции от макросов отличаем? ;-)
Anatoly Podgoretsky (2005-02-28 20:46:00) [4]hgd (28.02.05 18:19) [6]
В TColor не сидит RGB, только как частный случай. Для получения RGB надо использовать функцию ColorToRGB
Sphinx (2005-02-28 18:43:00) [5]> The value $00FF0000 represents full-intensity, pure blue,
> $0000FF00 is pure green, and $000000FF is pure red.
Что и подтверждает мои слова...
Sphinx (2005-02-28 18:39:00) [6]Хотелось бы напомнить, что "хитрый" Борланд "пошутил" и поменял в TColor биты R и B местами, поэтому просто > отбросив старший байт из значения типа TColorполучается BGR цвет :)
Просто Джо (2005-02-28 18:30:00) [7]То есть, отбросив старший байт из значения типа TColor получишь просто цвет RGB без данных о палитре.
Просто Джо (2005-02-28 18:28:00) [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.
Zeqfreed (2005-02-28 18:27:00) [9]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
hgd (2005-02-28 18:19:00) [10]Да меня вообщем то больше интересует теория, КАК в TColor сидит RGB?
Хинт (2005-02-28 18:06:00) [11]Можно так:
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;
Anatoly Podgoretsky (2005-02-28 17:59:00) [12]hgd (28.02.05 17:33)
Скажите правильно ли, что вычисление значение типа TColor = R + G + B
При указанном равенстве состовляющих, равносильно 72*3
palva1 (2005-02-28 17:55:00) [13]А вообще функция такая есть RGB
}|{yk (2005-02-28 17:53:00) [14]В WinAPI есть функция RGB.
TUser (2005-02-28 17:44:00) [15]Нет. Надо shl 8 и 16 делать.