![]() |
|
#1
|
||||
|
||||
![]() Здравия всем!
Столкнулся с некоторой проблемкой при работе с HBitmap; Использую WinAPI. Суть - Не могу сделать SelectObject на 4 битный битмап. Использую именно 4 битный, т.к. графические данные подготовлены в 16 цветной индексированной палитре, поэтому переводить в 32 бит - затратно для производительности приложения. Вот пример использования: Код:
CreateBitmap(8,8,1,1,@data2) - то нормально, а если: CreateBitmap(8,8,1,4,@data2) - то SelectObject = 0 и соответственно на контексте ничего. Аналогичная ошибка при 8, 16 битах, а 32 понятно норм. При этом сам CreateBitmap возвращает идентификатор в любом случае. а установка Код:
Пробовал использовать CreateDIBSelection, SetDIBits, StretchDiBits - не помогает. SetDIBits и StretchDiBits что-то пытаются, но слишком геморно. Собственно вопрос как отрисовать 4 битный битмап (на 32 битном контексте)? Програмистами не рождаются, ими становятся! |
#2
|
|||
|
|||
![]() Цитата:
Ничего не подсказывает? Т.е. для начала надо смотреть в сторону CreateCompatibleBitmap. Последний раз редактировалось lmikle, 07.03.2017 в 19:41. |
#3
|
||||
|
||||
![]() Нет, CreateCompatibleBitmap создает на основе контекста, а контекст 32 битый, а значит что битмап на выходе будет 32 битный, а мне нужен 4 битный. В этом и прикол. В итоге мне удалось реализовать задуманное через CreateDIBSelection.
Если вдруг кому понадобится: Что нам надо, 1. Переменную структуры BITMAPINFO, в которой опишем нужный нам формат битмапа. 2. Переменную Pointer, что бы знать куда писать данные. 3. Массив с палитрой типа RGBQUAD. 4. Собственно данные. Код:
Програмистами не рождаются, ими становятся! Последний раз редактировалось SCrat.ORS, 08.03.2017 в 10:55. |
Этот пользователь сказал Спасибо SCrat.ORS за это полезное сообщение: | ||
IvoX (22.05.2019)
|