Что нового

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

johnmarshall

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

загружаю 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 (качайте с официального форума)
 
Автор
johnmarshall

johnmarshall

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

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

Yashied

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

johnmarshall

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

Yashied

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

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

johnmarshall

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

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

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

Yashied

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

johnmarshall

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

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

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

Yashied

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

johnmarshall

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

Вложения

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

Yashied

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

Вложения

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

johnmarshall

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

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

Yashied

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