GetPixel - странности с цветом

Тема в разделе "WASM.WIN32", создана пользователем Gloomy, 11 дек 2005.

  1. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    В одной из своих программ столкнулся со странной проблемой - цвет созданной кисти не соответствует реальному. Создаю кисть зеленого цвета [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, английская, без каких-либо обновлений, точная копия с лицензии.



    Заранее большое спасибо!



    [​IMG] 1874802041__colors.zip
     
  2. Twilight

    Twilight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    6
    Мдя.. исходников что-то не видно...
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Gloomy

    Какая глубина цвета установлена в настройках ОС (и 2к и хр).
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    да, кстати, резонный вопрос про глубину цвета :)
     
  5. Bitfry

    Bitfry New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2004
    Сообщения:
    54
    Адрес:
    Россия, Санкт-Петербург
    Gloomy

    А PhotoShop стоит?

    Если да - то грохни Adobe Gamma (удали из автозагрузки).

    Есть ещё разные цветокорректоры в том числе дурные драва всяких видях.

    =)
     
  6. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург


    Да вроде бы все нормально качается, проверил.





    16 бит в обоих ОСях.





    Нет, не стоит.





    Дрова встроенные виндовые, т.к. видяха старая (Riva TNT2 M64 97-го г.в.) и для 2D-графики нет смысла искать и ставить какие-то иные дрова.
     
  7. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    Ух ты, вот это фокус - поменял глубину цвета на 32 бита и все стало отлично. Без намека никогда б не додумался глубину цвета сменить.



    О прочине: предполагаю, что число размером 24 бита (3 байта RGB) не помещается в 16 бит. А в 32 бита легко влазит. Правильно?
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Gloomy

    Правильно?

    Ход мысли правилен.



    Цитата из книги "Графический интерфейс GDI в MS Windows" А.В.Фролов, Г.В.Фролов:

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