Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 делать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо