В Delphi предполагается получить КРАСНОЕ значение TColor .
См. Некоторые цветовые константы в Графическом блоке :
(Большой список можно найти здесь ).
Эти цвета имеют то же значение, что и собственный тип ColorRef , используемый в Windows, который имеет порядок в BGR (синий / зеленый / красный) или системный цвет (см. Ниже).
Обратите внимание, что в .NET используется другой тип System.Drawing.Color : порядок: RGB (красный / зеленый / синий) и никаких системных цветов вообще.
Ваш код не будет работать для всех значений TColor, так как TColor может содержать два вида цветов:
- прямое значение RGB
- системное значение цвета, которое преобразуется графической системой Windows в пользовательское значение RGB
Чтобы выполнить сопоставление для всех возможных значений, вы должны использовать функцию ColorToRGB в графическом блоке (она преобразует системные цвета в соответствующие значения RGB).
В вашем конкретном случае это, вероятно, работает, поскольку пиксели Canvas не могут содержать системные цвета, только значения RGB.
Но: вы не должны использовать жестко закодированные литералы, такие как $ 000000FF, потому что их значение трудно угадать.
Чтобы получить значения Red / Green / Blue надлежащим образом, вы должны объединить функцию ColorToRGB с этими функциями в устройстве Windows:
function GetRValue(rgb: DWORD): Byte; inline;
function GetGValue(rgb: DWORD): Byte; inline;
function GetBValue(rgb: DWORD): Byte; inline;
Таким образом, вы бы получили такую функцию, чтобы универсально получить часть Red в Delphi:
function GetRed(Color: TColor): Byte;
begin
Result := GetRValue(ColorToRGB(Color));
end;
На этой странице есть хорошая справка по использованию цвета в Delphi.
- Йерун