FreeBasic
Главная
Вход
Регистрация
Четверг, 17.07.2025, 18:18Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
функция ImageGadget
DarkDemonДата: Вторник, 18.03.2025, 19:12 | Сообщение # 16
Полковник
Группа: Друзья
Сообщений: 218
Репутация: -1
Статус: Offline
Цитата haav ()
Конечно нет. Весь механизм работы в том , чтобы для реальных прозрачных пикселей из PNG определить цвет , который сливается с фоном под рисунком. Если окно имеет белый цвет , и мы указали в функции тоже белый цвет , то прозрачные пиксели в GDI+ битмапе заменяются на пиксели белого цвета в GDI битмапе (при преобразовании битмапа из GDI+ в GDI). И уж потом мы GDI битмап пихаем в ImageGadget. Мы не можем в ImageGadget (ака Static control) запихать GDI+ битмап , хоть нам бы это очень бы и хотелось. Другой вопрос , а почему же не сделали такую возможность MS? Для GDI битмапов сделали , а для GDI+ битмапов нет. Наверное они посчитали такой способ (отправка сообщения STM_SETIMAGE) устаревшим. Типа пусть рисуют GDI+ сами на нужном Controls и следят за перерисовкой и пр. Так в принципе и делают. А мне нравится , когда отправил битмап в ImageGadget и больше не думаешь о том , как он там рисуется/перерисовывается (все на совести внутреннего обработчика MS).

Жость! ))) Я вот всё это читаю и планомерно опухаю. Да ладно не запаривайся. Главное у Vitamin-а всё работает.
 
haavДата: Вторник, 18.03.2025, 20:07 | Сообщение # 17
Генералиссимус
Группа: Администраторы
Сообщений: 1404
Репутация: 50
Статус: Offline
Может я не до конца понятно объяснил.
GDI битмапы изначально с бородатых времен (Win3) не поддерживают прозрачность
GDI+ битмапы появились кажется в Win2000 и они как раз прозрачность поддерживают

Но вся соль в том , что GDI битмапы можно легко отправить в Static control с помощью сообщения STM_SETIMAGE и не думать о том , когда и как его перерисовать (например при ресайзинге окна). А вот GDI+ битмапы мы так отправить не можем. Максимум , это рисовать их с помощью соответствующих GDI+ функций на окне (прибегая так же к некоторым функциям православной GDI). Для того , чтобы была возможность загружать изображения форматов , отличных от BMP (BMP кстати нативно поддерживаются православной GDI) , я прибег к GDI+ , которая загружает их в свой формат GDI+ битмапа. Но как его вывести так же просто , как обычный GDI битмап? Ведь у меня уже существует в библиотеке простой метод для GDI битмапов. Для этого в GDI+ существует функция преобразования GDI+ -> GDI , но естественно с потерей прозрачности.

В итоге:

PNG файл в GDI+ битмап с полной поддержкой прозрачности
GDI+ битмап -> GDI битмап с потерей прозрачности , но с заменой прозрачных пикселей на цвет из параметра Load_Image
отправка GDI битмапа в ImageGadget


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Среда, 19.03.2025, 06:59 | Сообщение # 18
Полковник
Группа: Друзья
Сообщений: 218
Репутация: -1
Статус: Offline
Спасибо Стас, более менее понятно растолковал. Я туда, в GDI, за всю жизнь лазил всего пару раз
за парой функций и особо не разбирался что там к чему.
Хотя всегда предполагал, что прозрачность вида [есть пиксел\нет пиксела] мол должна быть.
Ну раз нет - так и суда нет)))
 
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: