Что нового

Использование FreeImage без создания дополнительных файлов

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Многие, кто использовал в своих скриптах библиотеку FreeImage, задавалиь вопросом, как использовать изображения, загруженные с помощью этой библиотеки, напрямую, т.е. без создания временных файлов, поддерживаемых GDI+. Например, простой пример - отобразить картинку в GUI. Для актуальности использования FreeImage пусть это будет изображение в формате Targa (.tga). Хотя, в данном примере исходный файл может быть любого типа (.bmp, .jpg, .png и т.д.).

Код:
#Include <FreeImage.au3>
#Include <WinAPI.au3>

$File = @ScriptDir & '\Test.tga'

_FreeImage_LoadDLL(@ScriptDir & '\FreeImage.dll')
$pDIB = _FreeImage_LoadU(_FreeImage_GetFIFFromFilenameU($File), $File)
If Not $pDIB Then
	Exit
EndIf
$Width = _FreeImage_GetWidth($pDIB)
$Height = _FreeImage_GetHeight($pDIB)
$hDC = _WinAPI_GetDC(0)
$Ret = DllCall('gdi32.dll', 'ptr', 'CreateDIBitmap', 'hwnd', $hDC, 'ptr', _FreeImage_GetInfoHeader($pDIB), 'dword', 0x04, 'ptr', _FreeImage_GetBits($pDIB), 'ptr', _FreeImage_GetInfo($pDIB), 'uint', 0)
If (Not @Error) And ($Ret[0]) Then
	$hDIB = $Ret[0]
Else
	$hDIB = 0
EndIf
_WinAPI_ReleaseDC(0, $hDC)
_FreeImage_Unload($pDIB)
;~_FreeImage_UnLoadDLL()
If Not $hDIB Then
	Exit
EndIf

GUICreate('MyGUI', $Width, $Height)
GUICtrlCreatePic('', 0, 0, $Width, $Height)
;~GUICtrlSendMsg(-1, $STM_SETIMAGE, $IMAGE_BITMAP, $hDIB)
GUICtrlSendMsg(-1, 0x0172, 0, $hDIB)
GUISetState()

Do
Until GUIGetMsg() = -3
 
Верх