Прорисовать
один пиксель в определенной позиции мы можем с
помощью вызова функции SetPixel(), описанной в wingdi.h:
WINGDIAPI COLORREF WINAPI SetPixel(HDC, int, int, COLORREF);
Первый три аргумента очевидны - контекст
устройства вывода и координаты прорисовываемого
пикселя. Но что такое COLORREF?
Здесь следует пояснить, что каждый
пиксель на экране состоит из трех микроточек -
красной, зеленой и синей. Каждая из этих
микроточек может светится с интенсивностью от 0
(микроточка не светится) до 255 (максимальная
яркость). Например, если светится только красная
составляющая, то получаются цвета от
темно-бордового (почти черного) до ярко красного.
Комбинируя микроточки и их интенсивность, мы
можем определить почти 17 миллионов цветов (будут
ли они все поддерживаться на компьютере
читателя, определяется видеоподсистемой
компьютера). Обычно в таких случаях говорят об
RGB-значениях цвета (red, green, blue - красный, зеленый,
голубой).
Вернемся к COLORREF. Опять обратимся к
заголовочному файлу, но на сей раз не к wingdi.h, а к
windef.h:
typedef DWORD COLORREF;
Понятно, что COLORREF - это двойное слово. Оно
кодируется следующим образом:
0x00bbggrr
т.е. младший байт определяет
интенсивность красного, второй - зеленого, третий
- синего цвета.
При нормальном завершении функция
возвращает предыдущее значение цвета пикселя.
Если возвращаемое значение равно -1, то это
говорит либо о возникновении ошибки, либо о том,
что координаты пикселя вышли за пределы рабочей
области окна. |