{ **** UBPFD *********** by delphibase.endimus.com ****
>>
Зависимости: нет
Автор: Gua, fbsdd@ukr.net, ICQ:141585495, Simferopol
Copyright:
Дата: 03 мая 2002 г.
***************************************************** }procedure ColorToGL(c: TColor; var R, G, B: GLFloat);
begin
R := (c mod $100) / 255;
G := ((c div $100) mod $100) / 255;
B := (c div $10000) / 255;
end;
Here's the translation of the Delphi code snippet into Russian:
Процедура ColorToGL конвертирует значение типа TColor из Delphi в цвет OpenGL, представленный тремя вещественными значениями: красный (R), зеленый (G) и синий (B).
Разбивка кода:
R := (c mod $100) / 255;
Выражение (c mod $100) извлекает наименьший значащий байт (LSB) значения типа TColor, представляющий синий компонент.
Результат делится на 255, чтобы масштабировать его из байта (0-255) в вещественное значение между 0.0 и 1.0.
G := ((c div $100) mod $100) / 255;
Выражение (c div $100) выполняет целочисленное деление, эффективно сдвигая биты значения типа TColor вправо на 8 позиций (т.е., дели на 256).
Это извлекает средний байт, представляющий зеленый компонент.
Результат затем берется модуль 256, чтобы извлечь наименьший значащий байт (LSB), который делится на 255, как в шаге 1.
B := (c div $10000) / 255;
Аналогично шагу 2, но выражение (c div $10000) сдвигает биты вправо на 16 позиций (т.е., дели на 65536).
Это извлекает наибольший значащий байт, представляющий красный компонент.
Результат делится на 255, как в шагах 1 и 2.
Результаты R, G и B - вещественные числа между 0.0 и 1.0, которые можно использовать для установки цвета OpenGL.
Альтернативное решение могло бы быть использованием встроенных свойств Delphi TColor для извлечения отдельных компонентов цвета (например, Red, Green и Blue) и масштабирования их, как нужно для OpenGL. Например:
procedure ColorToGL(c: TColor; var R, G, B: GLFloat);
begin
R := c.Red / 255;
G := c.Green / 255;
B := c.Blue / 255;
end;
Эта APPROACH более читаемая и поддерживаемая, но может быть менее эффективной из-за дополнительных вызовов функций.
Процедура ColorToGL для перевода цвета из TColor в OpenGL, которая разбивает цвет на компоненты R, G и B.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS