русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Изменение цвета в windows C++

О цветах

Цветные дисплеи требуют более одного бита для хранения информации о пикселе. Больше битов — больше цветов. Число уникальных цветов равно 2 в степени, равной числу битов. 16-цветные видеоадаптеры требуют 4 бита на пиксель. Эти биты организованы в цветовые плоскости — красная плоскость, зеленая плоскость, голубая плоскость и плоскость интенсивности. Адаптеры с 8, 16 или 24 битами на пиксель имеют одну цветовую плоскость, в которой набор смежных битов представляет цвет каждого пикселя.

Функция GetDeviceCaps дает вам возможность распознать организацию памяти видеоадаптера и число цветов, которые он может отобразить. Такой вызов данной функции возвращает число цветовых плоскостей:

iPlanes = GetDeviceCaps (hdc, PLANES);

Следующий вызов возвращает число битов цвета для представления одного пикселя:

iBitsPixel = GetDeviceCaps (hdc, BITSPIXEL);

Большинство графических устройств, способных отображать цвета, используют или множество цветных плоскостей или множество битов на пиксель, но не и то и другое сразу. Другими словами, один из указанных вызовов будет возвращать значение, равное 1. Число цветов, которые могут быть отображены видеоадаптером, вычисляется по формуле:

iColors = 1 << (iPlanes * iBitsPixel);

Это значение не всегда совпадает с числом цветов, которое можно получить с помощью параметра NUMCOLORS:

iColors = GetDeviceCaps (hdc, NUMCOLORS);

Например, эти два значения будут различными для большинства плоттеров. Для плоттера значения и PLANES и BITSPIXEL будут равны 1, а величина NUMCOLORS будет зависеть от числа цветных перьев, которые имеются в плоттере. Для монохромных устройств функция GetDeviceCaps возвращает значение, равное 2, при вызове с параметром NUMCOLORS.

Более важно то, что эти два значения могут также отличаться для 256-цветных видеоадаптеров, поддерживающих загружаемые цветовые палитры. Функция GetDeviceCaps с параметром NUMCOLORS возвращает число цветов, зарезервированных Windows, которое равно 20. Оставшиеся 236 цветов могут быть заданы Windows-программой, использующей управление палитрами.
Windows использует беззнаковое 32-разрядное длинное целое для представления цвета. Тип данных для цвета называется COLORREF. Младшие три байта задают красную, зеленую и голубую составляющие, величина которых находится в интервале от 0 до 255, как показано на рис. 4.3. Таким образом, палитра может иметь 224 (примерно 16 миллионов) цветов.

Рис. 4.3.  32-разрядное представление цвета

Это беззнаковое длинное целое часто называют "RGB-цвет". Заголовочный файл Windows содержит несколько макросов для работы со значениями RGB. Макрос RGB получает три аргумента, представляющих красную, зеленую и голубую составляющие, и конструирует из них беззнаковое длинное целое:

#define RGB(r, g, b)       ((COLORREF)(((BYTE)(r) | \
((WORD)(g) << 8)) | \
(((DWORD)(BYTE)(b)) << 16)))
Таким образом, величина:
RGB (255, 0, 255)

равна 0x00FF00FF, значению RGB для пурпурного цвета (magenta). Когда все три аргумента равны 0, цвет — черный; когда все три равны 255 — белый. Макросы GetRValue, GetGValue и GetBValue извлекают беззнаковые символьные значения соответствующих цветов из значения RGB-цвета. Эти макросы иногда полезны, если вы используете функции Windows, возвращающие значение RGB в вашу программу.

Число цветов, возвращаемое функцией GetDeviceCaps, это число чистых цветов, которые может отобразить устройство. В дополнение к чистым цветам Windows может использовать полутона, представляющие собой пиксельный шаблон из пикселей разных цветов. Не все уникальные комбинации байтов красного, зеленого и голубого цветов формируют разные полутоновые шаблоны. Например, на 16-цветном VGA значения красного, зеленого, голубого должны быть возведены в 4-ю степень для получения различных полутонов. Таким образом, для этих адаптеров вы имеете 218 или 262 144 полутона.

Вы можете определить ближайший чистый цвет для любого цвета, используя функцию GetNearestColor:

rgbPureColor = GetNearestColor (hdc, rgbColor);

Просмотров: 15726


Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.