Aleksey Kozlov
2009-04-08 16:53:09 UTC
Hi, All!
Имеется дельфийский компонент. Он отрисовывается в памяти на битмап 24bpp, и
копируется на канву функцией BitBlt. В режиме экрана 24bpp компонент имеет
одинаковый оттенок с окружающими панелями, а при 16bpp - чуть светлее. Скриншот
даёт, что компонент имеет честный цвет clSilver = C0C0C0, а окружающие панели и
другие программы, к примеру, встроенный виндовый калькулятор, имеют цвет
BFBFBF.
Получается если заливать прямоугольник с помощью FillRect, цвет выходит
"левый", но вот GetPixel возвращает исходный C0C0C0, т.е. преобразование
работает в обе стороны.
Особенно странно, что C0 круглое число, делится на что угодно, и как его можно
округлить до BF непонятно, как раз обратное было бы более объяснимо.
Собственно вопрос а) как это получается?
и б) как с этим бороться?
Пока покрасил компонент в BFBFBF, при 16 битовом цвете разницы с фоном нет. При
32 битном - тоже. Совсем уже ничего не понимаю. В любом случае есть в этом что
то неправильное.
With best regards, Aleksey.
Имеется дельфийский компонент. Он отрисовывается в памяти на битмап 24bpp, и
копируется на канву функцией BitBlt. В режиме экрана 24bpp компонент имеет
одинаковый оттенок с окружающими панелями, а при 16bpp - чуть светлее. Скриншот
даёт, что компонент имеет честный цвет clSilver = C0C0C0, а окружающие панели и
другие программы, к примеру, встроенный виндовый калькулятор, имеют цвет
BFBFBF.
Получается если заливать прямоугольник с помощью FillRect, цвет выходит
"левый", но вот GetPixel возвращает исходный C0C0C0, т.е. преобразование
работает в обе стороны.
Особенно странно, что C0 круглое число, делится на что угодно, и как его можно
округлить до BF непонятно, как раз обратное было бы более объяснимо.
Собственно вопрос а) как это получается?
и б) как с этим бороться?
Пока покрасил компонент в BFBFBF, при 16 битовом цвете разницы с фоном нет. При
32 битном - тоже. Совсем уже ничего не понимаю. В любом случае есть в этом что
то неправильное.
With best regards, Aleksey.