png - Aero 窗口上的 Autohotkey 透明 PNG

标签 png transparency gdi+ autohotkey aero

我想创建类似于 Winlaunch 的应用程序,它是一个显示带有程序快捷方式的 Aero 窗口的应用程序。到目前为止,我已经能够使用 Aero.ahk 库和 Autohotkey GUI 创建窗口。但具有透明度的 PNG 图标在其周围显示出丑陋的白色边框。请参阅屏幕截图。

enter image description here

如何解决?

这是到目前为止的脚本:

#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,但我不知道如何将两者结合起来。

最佳答案

我知道这有点晚了,但我设法使用 GDIP 库在没有锯齿的情况下渲染 PNG,前后示例: enter image description here

在尝试代码之前,您需要在与脚本相同的目录中拥有一个名为“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)

enter image description here

关于png - Aero 窗口上的 Autohotkey 透明 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22725285/

相关文章:

javascript - 如何使用 PNGJS 库从 rgb 矩阵创建 png?

android - 如何从下载的png设置android imageview

javascript - 将文本嵌入 PNG

Hyperledger Fabric 的透明度

c++ - 错误 C2248 : 'Gdiplus::Bitmap::Bitmap' : cannot access private member declared in class 'Gdiplus::Bitmap'

c# - 构建 GrayScaleBrushes 类

PHP PNG 24 位透明透明

android - 如何使布局和 View 的背景透明?

python - 在 Plotly 图中将背景颜色设置为透明

listview - 防止 RTL TListView 镜像复选框和/或图形