Autohotkey прозрачный PNG в окне Aero

Я хочу создать что-то похожее на Winlaunch, приложение, которое показывает окно Aero с ярлыками программ. До сих пор я мог создать окно с помощью библиотеки Aero.ahk и графического интерфейса Autohotkey. Но значки PNG с прозрачностью показывают уродливую белую рамку вокруг них. Смотрите скриншот.

введите описание изображения здесь

Как исправить?

Это сценарий на данный момент:

#Include AeroLib.ahk
#Include Gdip.ahk
CoordMode, Mouse, Screen
MouseGetPos, mx, my
mx := mx-250
my := my-150
Aero_StartUp()

DWM_Win_TransColor:=0x123456
Gui,Color,%DWM_Win_TransColor%
Gui 1: +AlwaysOnTop
Gui,+LastFound
MainHandle:=WinExist()

Aero_ChangeFrameAreaAll(MainHandle)
Gui Add, Picture, x10 y10 w96 h96 gRunProgram1, ie.png
Gui 1: Show,x0 y0 w320 h240,Launchy
WinSet,TransColor,%DWM_Win_TransColor%,ahk_id %MainHandle%
Return

RunProgram1:
Run C:\Program Files\Internet Explorer\iexplore.exe
goto GuiClose

GuiClose:
Aero_End() ;Shutdown Aero Libary
Gdip_Shutdown(pToken)
ExitApp

Я также попробовал библиотеку GDIp, которая, кажется, может отображать PNG без артефактов, но я не знаю, как объединить оба.


person andibra    schedule 29.03.2014    source источник
comment
вы пробовали с AltSubmit?   -  person Joe DF    schedule 29.03.2014
comment
да. Это немного улучшается, но я не избавляюсь от артефактов полностью. Думаю, мне придется принять это как есть   -  person andibra    schedule 29.03.2014
comment
Вы уверены, что у самого png нет белой рамки? Кроме того, пробовали ли вы использовать другие типы прозрачных изображений (например, GIF, TARGA, TIFF и, возможно, ICO)?   -  person MCL    schedule 29.03.2014


Ответы (1)


Я знаю, что это немного поздно, но мне удалось использовать библиотеку GDIP для рендеринга PNG без псевдонима, пример до и после: введите описание изображения здесь

Прежде чем пробовать код, вам необходимо иметь папку с именем lib в том же каталоге, что и ваш скрипт, а внутри папки lib у вас должен быть файл с именем Gdip.ahk, содержащий следующий код: https://github.com/tariqporter/Gdip/blob/master/Gdip.ahk

Теперь вы можете попробовать этот код:

If !pToken := Gdip_Startup()
{
    MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
    ExitApp
}
frameNum1 := Gdip_CreateBitmapFromFile("6.png") 
Gui, 2: -Caption +E0x80000 +LastFound +OwnDialogs +Owner +AlwaysOnTop
Gui, 2: Show, NA
hwnd1 := WinExist()
Width := Gdip_GetImageWidth(frameNum1), Height := Gdip_GetImageHeight(frameNum1)
hbm := CreateDIBSection(Width, Height)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
Gdip_SetInterpolationMode(G, 7)
trans := 1
Gdip_DrawImage(G, frameNum1 , 0, 0, Width, Height, 0, 0, Width, Height, trans)
UpdateLayeredWindow(hwnd1, hdc, 200, 600, Width, Height)

введите описание изображения здесь

person Balawi28    schedule 10.03.2021