Что нового

[Криптография] Перекодировать gif в png

DanSaratov

Новичок
Сообщения
112
Репутация
1
Примерно так это должно работать:
Было:
1.gif

Стало:
1.png


Как можно провернуть это посредством autoit?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
DanSaratov,
Можно так.
Код:
#include <GDIPlus.au3>

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\1.gif')
_GDIPlus_ImageSaveToFile($hImage, @ScriptDir & '\1.png')
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
Или так.
Код:
#include <GDIPlus.au3>
#Include <WinAPIEx.au3>

Local $hImage, $hHBitmap, $iW, $iH, $tBits, $pBits, $hBitmap

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\1.gif')
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
$hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$tBits = DllStructCreate('byte[' & (4 * $iW * $iH) & ']')
$pBits = DllStructGetPtr($tBits)
_WinAPI_GetBitmapBits($hHBitmap, DllStructGetSize($tBits), $pBits)
_WinAPI_DeleteObject($hHBitmap)
$hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH, 4 * $iW, $GDIP_PXF32ARGB, $pBits)
_GDIPlus_ImageSaveToFile($hBitmap, @ScriptDir & '\1.png')
_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
Оба варианта делал в 3.3.8.1 (на работе другого нет).
 
Верх