Что нового

неправильная отрисовка прозрачности PNG

damien2008

Осваивающий
Сообщения
178
Репутация
34
добрый день. такой вопрос:

загружаю PNG рисунок с прозрачностью так (что-то в виде кнопки с 3 статусами normal, highlight, pressed):
(пример с немецкого форума, не нашел более подходящего варианта)

Код:
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $heignt, $hGraphic)
$hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

$hButtonB = _Button_Init(75, 20, 200, 200, 4) 
_Button_Set_Pic($hButtonB, 0, 'norman.png')
_Button_Set_Pic($hButtonB, 1, 'highlight.png')
_Button_Set_Pic($hButtonB, 2, 'pressed.png')
_Button_Set_Ani_Speed($hButtonB, 30, 14, 7)


а в цикле перерисовую так:
Код:
_GDIPlus_GraphicsClear($hBackbuffer, 0x00000000)
_Button_Draw($hBackbuffer, $hButtonB)
_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)


из этого всего:
Код:
_Button_Draw($buffer, ByRef $btn)
...
_GDIPlus_GraphicsDrawImage(...)


_Button_Set_Pic(1, 2, image)
...
_GDIPlus_BitmapCreateFromMemory(image)


и кнопка выглядит убожески :


если очищать подложку так:
Код:
_GDIPlus_GraphicsClear($hBackbuffer, 0xFF000000)

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

больше никаких функций перерисовки нету.
в чем может быть проблема?

UPD GUICtrl_SetOnHover не подошла в силу срабатывания "hover" эффекта через раз...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Skin UDF (качайте с официального форума)
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
Yashied

есть проблема: когда перемещаю курсор над кнопками, происходит "моргание" белого квадрата. буквально доли-секунды..
OS Win7 x86 au3 v.3.3.8.1
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Включите Aero.
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
а без него есть возможность?
не уверен, что у всех будет Aero... (прозрачность)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А без Aero пофиг что и как там мерцает, т.к. эстетическая составляющая полностью отсутствует. Да и вообще, делать скиновые элементы без Aero, это моветон.

Если хотите, то можете использовать Skin UDF v0.1, там нет мерцаний, но библиотека работает на битмапах (см. пример).
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
ок. :smile:
хороший пример. спасибо.

думаю, попробую конвертировать PNG в ICO, может прозрачность иконок лучше реализована в windows)

UPD. GIF работает :smile: (старая школа 8))
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Если исключить вариант непосредственной отрисовки изображений на форме, то ситуация складывается такая:
  • Bitmap. При установки в control ("Static") мерцания отсутствуют. Изображения, содержащие прозрачность, выводятся некорректно. Таким образом, необходимо заранее избавиться от прозрачности путем добавления подложки (в простейшем случае цвета фона окна).
  • Icon. При установки в control присутствуют мерцания в случае выключенного Aero. В Windows XP всегда мерцает.
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
рисую подложку (цвета фона окна), но
если очищать ее так:
Код:
_GDIPlus_GraphicsClear($hBackbuffer, 0xFF000000)

то у меня и получается убожество (в моем примере). а если не очищать или взять, например, 0x00000000,
то вообще ничего не рисуется :scratch:

я взял и перевел в GIF. конечно тени, там.. и так по-мелочам, заметно.. хуже..
попробую все-таки GUICtrlOnHover еще раз
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Выложите все .png (3 состояния).
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
вот
 

Вложения

  • btn.zip
    56.8 КБ · Просмотры: 7

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Вот. Немного изменил Skin.au3, т.к. в версии 3.3.14.x кнопки перестали возвращать ID на нажатие. Очередной бред в новой версии.
 

Вложения

  • Test.zip
    59.4 КБ · Просмотры: 31
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
работает :D

Yashied
не могу добавить репутацию, тчо-то сессия отваливается
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
damien2008 сказал(а):
не могу добавить репутацию, тчо-то сессия отваливается
Выйдите, залогиньтесь "навсегда".
 
Верх