В одной из своих программ столкнулся со странной проблемой - цвет созданной кисти не соответствует реальному. Создаю кисть зеленого цвета [CreateSolidBrush(0x008000)], закрашиваю ей некоторую область [FillRect(...)]. При взятии пробы цвета из этой области посредством функции GetPixel получаю весьма странный результат: 0x008200 вместо ожидаемого значения 0x008000. Проверил работу программы в Win XP - отлично работает, стабильно возвращая 0х008000. Однако на этом конкретном цвете чудесные чудеса не закончились. Проведя аналогичные тесты для красного (0х800000) и синего (0х000080) цветов, так же было замечено отклонение от нормы: 0х840000 и 0х000084 соответственно. В Win XP все пучком, что нарисовал, то и получил. Извращался как только мог, даже изобразил картинку с этими тремя цветами, но результат аналогичный. MSDN о таких удивительных превращениях скромно молчит. Может быть кто-то уже сталкивался с этой проблемой? Такое поведение программы совершенно недопустимо, мне обязательно нужно получать правильные постоянные RGB-значения цветов. Прилагаю исходник программы (FASM). ОС: Win 2k, английская, без каких-либо обновлений, точная копия с лицензии. Заранее большое спасибо! 1874802041__colors.zip
Gloomy А PhotoShop стоит? Если да - то грохни Adobe Gamma (удали из автозагрузки). Есть ещё разные цветокорректоры в том числе дурные драва всяких видях. =)
Да вроде бы все нормально качается, проверил. 16 бит в обоих ОСях. Нет, не стоит. Дрова встроенные виндовые, т.к. видяха старая (Riva TNT2 M64 97-го г.в.) и для 2D-графики нет смысла искать и ставить какие-то иные дрова.
Ух ты, вот это фокус - поменял глубину цвета на 32 бита и все стало отлично. Без намека никогда б не додумался глубину цвета сменить. О прочине: предполагаю, что число размером 24 бита (3 байта RGB) не помещается в 16 бит. А в 32 бита легко влазит. Правильно?
Gloomy Правильно? Ход мысли правилен. Цитата из книги "Графический интерфейс GDI в MS Windows" А.В.Фролов, Г.В.Фролов: "... в зависимости от текущего цветового разрешения Windows может предоставить приложению приближенный цвет, который максимально соответствует запрошенному логическому цвету. Функция GetNearestColor возвращает для запрошенного логического цвета ... физический цвет, составленный только из компонент чистого цвета ..."