- Сообщения
- 5,379
- Репутация
- 2,724
Простой пример конвертации иконки (HICON) заданного размера в .png файл. Работает только с 32-битными иконками (RGB+Alpha). Для запуска этого примера вам потребуется библиотека WinAPIEx.au3.
Код:
#Include <GDIPlus.au3>
#Include <WinAPIEx.au3>
; Only for 32 bit (RGB + Alpha) icons!
$sPng = @ScriptDir & '\Test.png'
$sIco = @SystemDir & '\shell32.dll'
$Index = 130
$W = 48
$H = 48
_GDIPlus_Startup()
$hIcon = _WinAPI_ShellExtractIcon($sIco, $Index, $W, $H)
$aInfo = _WinAPI_GetIconInfo($hIcon)
$tBits = DllStructCreate('byte[' & (4 * $W * $H) & ']')
$pBits = DllStructGetPtr($tBits)
_WinAPI_GetBitmapBits($aInfo[5], DllStructGetSize($tBits), $pBits)
$hBitmap = _GDIPlus_BitmapCreateFromScan0($W, $H, 4 * $W, $GDIP_PXF32ARGB, $pBits)
_WinAPI_DestroyIcon($hIcon)
For $i = 4 To 5
_WinAPI_DeleteObject($aInfo[$i])
Next
_GDIPlus_ImageSaveToFile($hBitmap, $sPng)
_GDIPlus_ImageDispose($hBitmap)
_GDIPlus_Shutdown()
Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipCreateBitmapFromScan0', 'int', $iWidth, 'int', $iHeight, 'int', $iStride, 'int', $iPixelFormat, 'ptr', $pScan0, 'ptr*', 0)
If @error Then
Return SetError(1, 0, 0)
Else
If $aResult[0] Then
Return SetError($aResult[0], 0, 0)
EndIf
EndIf
Return $aResult[6]
EndFunc ;==>_GDIPlus_BitmapCreateFromScan0