#include-once
#include <GDIPlus.au3>


Func _GDIPlus_ImageLoadFromLibrary($dll, $resname)
	$memdll = _WinAPI_LoadLibrary($dll)
	$hbitmap = _WinAPI_LoadBitmap($memdll, $resname)
	$img = _GDIPlus_BitmapCreateFromHBITMAP($hbitmap)
	_WinAPI_FreeLibrary($memdll)
	_WinAPI_DeleteObject($hbitmap)
	Return $img
EndFunc

Func _GDIPlus_ImageShow($img,$titel="",$x=-1,$y=-1,$mode=1)
	If $img=0 Then Return -1
	Local $wx,$wy
	If $x=-1 Then
		$x=_GDIPlus_ImageGetWidth($img)
	EndIf
	If $x>@DesktopWidth Then $x=@DesktopWidth
	If $y=-1 Then
		$y=_GDIPlus_ImageGetHeight($img)
	EndIf
	if $y>@DesktopHeight-50 Then $y=@DesktopHeight-50
	$wx=$x
	$wy=$y
	Local $gui=GUICreate($titel,$x,$y,Default,Default,BitOR(0x00C00000,0x00080000)) ;bitor($WS_CAPTION,$WS_SYSMENU)
	GUISetState(@SW_SHOW,$gui)
	Local $gra=_GDIPlus_GraphicsCreateFromHWND($gui)
	Local $buffer=_GDIPlus_BitmapCreateFromGraphics($wx,$wy,$gra)
	Local $backgra=_GDIPlus_ImageGetGraphicsContext($buffer)
	_GDIPlus_GraphicsSetSmoothingMode($backgra,2)
	If $mode=1 Then _GDIPlus_GraphicsClear($backgra)
	_GDIPlus_GraphicsDrawImageRect($backgra,$img,0,0,$wx,$wy)
	While GUIGetMsg()<>-3 ;$GUI_EVENT_CLOSE
		_WinAPI_RedrawWindow($gui, "", "", 1280) ;$RDW_UPDATENOW + $RDW_FRAME
		_GDIPlus_GraphicsDrawImageRect($gra,$buffer,0,0,$wx,$wy)
		Sleep(10)
	WEnd
	_GDIPlus_GraphicsDispose($backgra)
	_GDIPlus_BitmapDispose($buffer)
	_GDIPlus_GraphicsDispose($gra)
	GUIDelete($gui)
	Return 1
EndFunc


;#Function# ============================================================================================================================================
; Name............: _GetImagefromResource
; Description.....: Laden eines Bildes  (BMP,GIF,JPG) aus einer Resourcedatei
; Syntax..........: _GetImagefromResource($Resname, $Resfile = -1, $ResType = 10)
; Parameters......:
;                   $Resname     - Name der Resource
;                   $Resfile     - Resourcedateiname , wenn leer wird die Autoit Exe Datei verwendet
;                   $ResType     - Resourcetype 2= Bitmap, alle anderen = 10. GIF und JPG Dateien müssen als RCDATA gespeichet sein.
; Return values  .:
;                   Success         - Handle des des Bitmaps
;                   Failure         - Comming soon
; Author ........:
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ======================================================================================================================================================
;~ Func _GetImagefromResource($Resname, $Resfile = -1, $ResType = 10)
;~     Local Const $IMAGE_BITMAP = 0
;~     Local $hmod, $hwnd, $InfoBlock, $ResSize, $Mem, $pMem, $dll, $dll2, $hData, $pData, $pStream, $ret, $hBitmap, $pBitmap
;~     If $Resfile = -1 Then; Resfile = Executable Autoit Exe
;~         $hmod = _WinAPI_GetModuleHandle("")
;~         If @error Then Return SetError(1, 0, 0)
;~     Else
;~         $hmod = _WinAPI_LoadLibrary($Resfile)
;~         If @error Then Return SetError(2, 0, 0)
;~     EndIf
;~     If $ResType =2  Then
;~         $hBitmap = _WinAPI_LoadImage($hmod, $Resname, $IMAGE_BITMAP, 0, 0, 0)
;~         If @error Then Return SetError(3, 0, 0)
;~         If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
;~         Return $hBitmap
;~     Else
;~         $InfoBlock = DllCall("kernel32.dll", "int", "FindResourceA", "int", $hmod, "str", $Resname, "long", $ResType)
;~         If @error Then Return SetError(4, 0, 0)
;~         $InfoBlock = $InfoBlock[0]
;~         If $InfoBlock = 0 Then Return SetError(5, 0, 0)
;~         $ResSize = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hmod, "int", $InfoBlock)
;~         If @error Then Return SetError(6, 0, 0)
;~         $ResSize = $ResSize[0]
;~         If $ResSize = 0 Then Return SetError(7, 0, 0)
;~         $Mem = DllCall("kernel32.dll", "int", "LoadResource", "int", $hmod, "int", $InfoBlock)
;~         If @error Then Return SetError(8, 0, 0)
;~         $Mem = $Mem[0]
;~         If $Mem = 0 Then Return SetError(9, 0, 0)
;~         $pMem = DllCall("kernel32.dll", "int", "LockResource", "int", $Mem)
;~         If @error Then Return SetError(8, 0, 0)
;~         $pMem = $pMem[0]
;~         If $pMem = 0 Then Return SetError(10, 0, 0)
;~         If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
;~         $hData = _MemGlobalAlloc($ResSize, 2)
;~         $pData = _MemGlobalLock($hData)
;~         _MemMoveMemory($pMem, $pData, $ResSize)
;~         _MemGlobalUnlock($hData)
;~         $ret = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0)
;~         $pStream = $ret[3]
;~         _GDIPlus_Startup()
;~         $pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
;~         $pBitmap = $pBitmap[2]
;~         $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
;~         _GDIPlus_BitmapDispose($pBitmap)
;~         _GDIPlus_Shutdown()
;~         $dll = DllStructCreate("Uint", $pStream)
;~         $dll2 = DllStructCreate("uInt", DllStructGetData($dll, 1) + 8)
;~         DllCall("", "UInt", DllStructGetData($dll2, 1), "UInt", $pStream)
;~         _WinAPI_DeleteObject($pStream)
;~         $pStream = 0
;~         _MemGlobalFree($hData)
;~         If $Resname <> -1 Then _WinAPI_FreeLibrary($hmod)
;~         Return $hBitmap
;~     EndIf
;~ EndFunc   ;==>_GetImagefromResource