# LoadPicture() [v1.1.23+]

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

    Handle := LoadPicture(Filename , Options, ByRef ImageType)

## 参数

Filename

  图片的文件名, 如果未设置为绝对路径则通常假定为 A_WorkingDir 目录中. 对于 DLL 或 EXE 文件, 如果仅仅指定了文件名(而不是完整路径), 那么可能会从当前执行程序(AutoHotkey.exe 或是已编译的程序) 目录, 或系统路径(加入到 PATH 中的那些路径) 中查找它.

Options

  一个包含零个或多个下列选项的字串, 每个选项之间以空格或制表符间隔:

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

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

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

ImageType

  如果指定了变量, 它被赋值为表示返回句柄类型的数字: 0(IMAGE_BITMAP 位图), 1(IMAGE_ICON 光标) 或 2(IMAGE_CURSOR 光标).

  如果忽略该参数或不是一个正确的变量名, 则返回值总是位图句柄(图标/光标类型会按需转换). 这是因为可靠地使用或删除 位图/图标/光标 句柄需要知道它是哪种类型.

## 备注

LoadPicture 也支持句柄表示法, 从一个已载入到内存中的图标或位图创建一个重调大小的图像, 或将一个图标通过忽略 ImageType 的方式转换成位图.

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

    if (not ImageType)  ; 位图(0) 或 ImageType 参数省略.
        DllCall("DeleteObject", "ptr", Handle)
    else if (ImageType = 1)  ; 图标
        DllCall("DestroyIcon", "ptr", Handle)
    else if (ImageType = 2)  ; 光标
        DllCall("DestroyCursor", "ptr", Handle)

## 相关

Image 句柄

## 示例

预加载并复用一些图像.

    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
    }
    ; 创建图标控件, 保持第一张图的宽高比
    Gui, Add, Pic, w600 h-1 vPic +Border, % "HBITMAP:*" Pics.1
    Gui, Show
    Loop
    {
        ; 切换图片!
        GuiControl, , Pic, % "HBITMAP:*" Pics[Mod(A_Index, Pics.Length())+1]
        Sleep 3000
    }
    return
    GuiClose:
    GuiEscape:
    ExitApp

dftg