| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Прозрачный Bitmap в STATIC? |
| Автор: WIN32API 23.12.2005, 15:38 | ||
Как в STATIC загрузить BMP-картинку из ресурсов программы и установить прозрачный цвет? Вообщем с загрузкой из ресурсов проблем нет (см. код ниже), а вот с установкой прозрачности...
|
| Автор: JoyEx 23.12.2005, 16:51 |
| Static Style: SS_CENTERIMAGE Для битмапа: - если изображение меньше, чем сам контрол, то остальное место вокруг заполняется цветом первого пикселя левого верхнего угла битмапа Для иконки: - если изображение меньше, чем сам контрол, то остальное место вокруг заполняется цветом фона контрола |
| Автор: WIN32API 23.12.2005, 17:12 |
| 2JoyEx В моем изображении этот пиксель черный. Если все сделать так, как ты сказал, то пустое пространство СТАТИКА заполняется черным цветом. А мне надо, чтобы картинка стала прозрачной. Т.е. черный цвет изображения должен стать прозрачным. |
| Автор: JoyEx 23.12.2005, 18:45 |
| используй тогда .ico (иконку) в инете есть куча программ для конвертирования битмапа в .ico Добавлено @ 18:46 можно и на лету (программно) делать из .bmp иконку, но зачем?! |
| Автор: WIN32API 23.12.2005, 20:34 | ||||
| 2JoyEx Из bmp иконку делать считаю неправильным решением. К тому же это будет немаленькая иконка. Может быть следующий вариант мне поможет? Я нашел в сети интересную процедуру DrawTransparentBitmap. Но, при применении, ничего не смог добится. Где ошибка и как исправить? Ошибка точно где-то в применении (см. ниже). Я в HDC дуб.
ПРИМЕНЕНИЕ:
|
| Автор: JoyEx 24.12.2005, 13:16 |
| Проще всего сделать с помощью LoadImage (,,, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT) Подробности смотрите в MSDN Добавлено @ 13:17 Вам нужен COLOR_3DFACE |
| Автор: WIN32API 24.12.2005, 14:19 |
| Так я именно через LoadImage (...) и делаю. А константы LR_LOADMAP3DCOLORS и LR_LOADTRANSPARENT бесполезны. Прозрачности нет! |
| Автор: JoyEx 24.12.2005, 15:42 |
| WIN32API Только что проверил свой вариант, т.е. то что советовал Вам. Всё работает! Вот так делайте: 1) Сделайте битмап глубиной цвета не более 8bpp (256 цветов) 2) В любом графическом редакторе измените первый пиксель (в битмапе) на тот цвет, который должен быть прозрачен 3) Для STATIC установите стили SS_BITMAP и SS_CENTERIMAGE 4) LoadImage(,,,,,LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS) 5) Через сообщение STM_SETIMAGE установите новый битмап на STATIC контрол |
| Автор: WIN32API 28.12.2005, 16:43 |
| 2JoyEx Спасибо! Все действительно работает. Вся загвоздка у меня была в глубине цвета. Еще раз спасибо! |