LoadPicture

载入图像文件并返回位图或图标句柄.

Handle := LoadPicture(Filename , Options, &OutImageType)

参数

Filename

类型: 字符串

图片的文件名, 如果未指定绝对路径, 则通常假定在 A_WorkingDir 目录中. 如果指定了 DLL 或 EXE 文件的名称而没有路径, 则可以从当前可执行文件目录(AutoHotkey.exe 或已编译的脚本) 或系统目录加载.

Options

类型: 字符串

如果为空或省略, 则默认为无选项. 否则, 指定以下一个或多个选项组成的字符串, 选项之间以空格或制表符分隔::

WnHn: 待载入图像的宽度和高度, n 为整数. 如果省略某个尺寸或指定为 -1, 该尺寸将在保持宽高比的情况下根据另一个尺寸进行计算. 如果两个尺寸都被省略, 将使用图像的原始尺寸. 如果任一尺寸被指定为 0, 则该尺寸仍会使用原始尺寸. 例如: "w80 h50", "w48 h-1""w48"(保持宽高比), "h0 w100"(使用原始高度但覆盖宽度).

Iconn: 指代多图标文件(一般是 EXE 或 DLL 文件) 中待载入图标的序号. 例如, "Icon2" 载入文件的第二个图标. 任何支持的图像格式都可以通过指定 "Icon1" 来转换为图标. 但是, 如果省略 OutImageType 参数, 图标将转换回位图.

GDI+: 尝试使用 GDI+ 的方式载入图像. 例如, "GDI+ w100".

&OutImageType

类型: VarRef

如果省略, 将不存储相应的值, 并且返回值始终是位图句柄(图标/光标类型会按需转换). 这是因为可靠地使用或删除位图/图标/光标句柄需要知道它是哪种类型. 否则, 指定一个变量的引用, 在这个变量中存储了一个表示返回句柄类型的数字: 0(IMAGE_BITMAP), 1(IMAGE_ICON) 或 2(IMAGE_CURSOR).

返回值

类型: 整数

这个函数返回一个位图或图标句柄, 这取决于是否指定了图片或图标, 以及是否存在 &OutImageType 参数.

备注

LoadPicture 也支持句柄语法, 如从一个已载入到内存中的图标或位图创建一个可调整大小的图像, 或将一个图标通过忽略 &OutImageType 转换成位图.

如果图像需要从内存中释放, 请调用任何适合于句柄类型的函数.

if (not OutImageType)  ; IMAGE_BITMAP(0) 或 OutImageType 参数省略.
    DllCall("DeleteObject", "ptr", Handle)
else if (OutImageType = 1)  ; IMAGE_ICON
    DllCall("DestroyIcon", "ptr", Handle)
else if (OutImageType = 2)  ; IMAGE_CURSOR
    DllCall("DestroyCursor", "ptr", Handle)

Image Handles

示例

预加载并复用一些图像.

Pics := []
; 寻找几张图像用来展示.
Loop Files, A_WinDir "\Web\Wallpaper\*.jpg", "R"
{
    ; 载入找到的图像并添加到数组中.
    Pics.Push(LoadPicture(A_LoopFileFullPath))
}
if !Pics.Length
{
    ; 如果发生找不到文件的情形, 将正确的路径手动添加到上述的 Loop 循环中.
    MsgBox("No pictures found! Try a different directory.")
    ExitApp
}
; 创建图标控件, 保持第一张图的宽高比.
MyGui := Gui()
Pic := MyGui.Add("Pic", "w600 h-1 +Border", "HBITMAP:*" Pics[1])
MyGui.OnEvent("Escape", (*) => ExitApp())
MyGui.OnEvent("Close", (*) => ExitApp())
MyGui.Show
Loop 
{
    ; 切换图片!
    Pic.Value := "HBITMAP:*" Pics[Mod(A_Index, Pics.Length)+1]
    Sleep 3000
}