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

Discussion in 'WASM.WIN32' started by Gloomy, Dec 11, 2005.

  1. Gloomy

    Gloomy New Member

    Blog Posts:
    0
    Joined:
    May 29, 2003
    Messages:
    48
    Location:
    Екатеринбург
    В одной из своих программ столкнулся со странной проблемой - цвет созданной кисти не соответствует реальному. Создаю кисть зеленого цвета [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

    Blog Posts:
    0
    Joined:
    Oct 17, 2005
    Messages:
    6
    Мдя.. исходников что-то не видно...
     
  3. q_q

    q_q New Member

    Blog Posts:
    0
    Joined:
    Oct 5, 2003
    Messages:
    1,706
    Gloomy

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

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    да, кстати, резонный вопрос про глубину цвета :)
     
  5. Bitfry

    Bitfry New Member

    Blog Posts:
    0
    Joined:
    Aug 11, 2004
    Messages:
    54
    Location:
    Россия, Санкт-Петербург
    Gloomy

    А PhotoShop стоит?

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

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

    =)
     
  6. Gloomy

    Gloomy New Member

    Blog Posts:
    0
    Joined:
    May 29, 2003
    Messages:
    48
    Location:
    Екатеринбург


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





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





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





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

    Gloomy New Member

    Blog Posts:
    0
    Joined:
    May 29, 2003
    Messages:
    48
    Location:
    Екатеринбург
    Ух ты, вот это фокус - поменял глубину цвета на 32 бита и все стало отлично. Без намека никогда б не додумался глубину цвета сменить.



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

    q_q New Member

    Blog Posts:
    0
    Joined:
    Oct 5, 2003
    Messages:
    1,706
    Gloomy

    Правильно?

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



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

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