#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
FileToBinaryFunc(@ScriptDir & '\About.png', 'AutoitImage' , 'Test.au3')
Func FileToBinaryFunc($filename, $FuncName, $Outfilename)
	Local $nBytes
	Local $hFile = _WinAPI_CreateFile($filename, 2, 2)
	If Not $hFile Then Return -1
	Local $tSize = FileGetSize($filename) + 1
	Local $DATA = DllStructCreate("byte[" & $tSize & "]")
	_WinAPI_ReadFile($hFile, DllStructGetPtr($DATA), $tSize, $nBytes)
	If @error Then
		_WinAPI_CloseHandle($hFile)
		Return -2
	EndIf
	_WinAPI_CloseHandle($hFile)
	Local $Binary = String(DllStructGetData($DATA, 1))
	Local $Len = StringLen($Binary) + 1
	Local $TXT = ''
	$TXT &= 'Func ' & $FuncName & '()' & @CRLF
	$TXT &= 'Local $TXT = ""' & @CRLF
	For $i = 1 To $Len Step 90
		$TXT &= '$TXT &= "' & StringMid($Binary, $i, 90) & '"' & @CRLF
	Next
	$TXT &= 'Return $TXT' & @CRLF
	$TXT &= 'EndFunc' & @CRLF
	Local $FileOpen = FileOpen($Outfilename, 1)
	FileWrite($FileOpen, $TXT)
	FileClose($FileOpen)
	Return True
EndFunc   ;==>FileToBinaryFunc

Func BinaryToFile($filename, $BinaryData)
	Local $FileOpen = FileOpen($filename, 2)
	If @error Then Return -1
	FileWrite($FileOpen, Binary($BinaryData))
	If @error Then Return -2
	FileClose($FileOpen)
	Return True
EndFunc   ;==>BinaryToFile

Func STATIC_SETBITMAP($hWnd, $HandleImage)
	Local $GWL_STYLE = (-16), $SS_BITMAP = 0x0000000E, $SS_ICON = 0x00000003, $STM_SETIMAGE = 0x0172
	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
	If Not BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $SS_BITMAP) = $SS_BITMAP Then
		_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) + $SS_BITMAP)
	ElseIf BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $SS_ICON) = $SS_ICON Then
		_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) - $SS_ICON)
	EndIf
	Return _SendMessage($hWnd, $STM_SETIMAGE, 0, $HandleImage)
EndFunc   ;==>STATIC_SETBITMAP

Func LoadImageFrom_BinaryData($BinaryData, $GDIPlus_ShutDown = True)
	; $GDIP_IMAGETYPE_BITMAP - Bitmap types: BMP, PNG, GIF, JPEG, TIFF, ICO, EXIF [Return HBITMAP Handle AND  imageobject[Bitmap Handle]]
	;$GDIP_IMAGETYPE_METAFILE - Metafile types: EMF, WMF [Return HENHMETAFILE Handle  (AND\OR) imageobject]
	;$GDIP_IMAGETYPE_UNKNOWN [Return new object]
	Local $tSize = StringLen($BinaryData) + 1
	Local $DATA = DllStructCreate("byte[" & $tSize & "]")
	DllStructSetData($DATA, 1, $BinaryData)
	Local $uFlags = 0x0002, $dwBytes = DllStructGetSize($DATA)
	Local $hMemory = DllCall("Kernel32.dll", "hwnd", "GlobalAlloc", "long", $uFlags, "long", $dwBytes)
	If @error Then
		Return -1
	Else
		$hMemory = $hMemory[0]
		If $hMemory = 0 Then Return -1
	EndIf
	Local $hLock = DllCall("Kernel32.dll", "ptr", "GlobalLock", "hwnd", $hMemory)
	If @error Then
		Return -2
	Else
		$hLock = $hLock[0]
		If $hLock = 0 Then Return -2
	EndIf
	Local $Destination = $hLock, $Source = DllStructGetPtr($DATA), $Length = $dwBytes
	DllCall("Kernel32.dll", "none", "RtlMoveMemory", "ptr", $Destination, "ptr", $Source, "long", $Length)
	If @error Then
		Return -3
	EndIf
	Local $fDeleteOnRelease = True, $Status, $ppstm, $Error
	Local $Error = DllCall("Ole32.dll", "int", "CreateStreamOnHGlobal", "ptr", $hLock, "int", $fDeleteOnRelease, "ptr*", 0)
	If @error Then
		Return -4
	Else
		If Not ($Error[0] = 0) Then Return -4
		$ppstm = $Error[3]
	EndIf
	Local $gdiplusOpen = DllOpen("gdiplus.dll")
	Local $ImageType = 0, $ImageWidth = 0, $ImageHeight = 0, $struct_GdiplusStartupInput, $Input, $LPInput, $VOID _
			, $LPVOID_token, $Status, $HBITMAP, $HENHMETAFILE, $GdiPlus_Dll_Hwnd, $GdiPlus_Token
	$struct_GdiplusStartupInput = _
			"int GdiplusVersion;" & _
			"int DebugEventCallback;" & _
			"int SuppressBackgroundThread;" & _
			"int SuppressExternalCodecs;"
	$Input = DllStructCreate($struct_GdiplusStartupInput)
	DllStructSetData($Input, "GdiplusVersion", 1)
	DllStructSetData($Input, "DebugEventCallback", 0)
	DllStructSetData($Input, "SuppressBackgroundThread", 0)
	DllStructSetData($Input, "SuppressExternalCodecs", 0)
	$LPInput = DllStructGetPtr($Input)
	$VOID = DllStructCreate("int")
	$LPVOID_token = DllStructGetPtr($VOID)
	$Status = DllCall($gdiplusOpen, "int", "GdiplusStartup", "ptr", $LPVOID_token, "ptr", $LPInput, "ptr", 0)
	If @error Then
		Return -5
	Else
		If Not ($Status[0] = 0) Then Return -5
		$LPVOID_token = $Status[1]
	EndIf
	Local $stream = $ppstm, $image = 0
	$Status = DllCall($gdiplusOpen, "int", "GdipLoadImageFromStream", "ptr", $stream, "int*", $image)
	If @error Then
		Return -6
	Else
		If Not ($Status[0] = 0) Then Return -6
		$image = $Status[2]
	EndIf
	$Status = DllCall($gdiplusOpen, "int", "GdipGetImageWidth", "hwnd", $image, "int*", 0)
	If Not @error Then
		If $Status[0] = 0 Then $ImageWidth = $Status[2]
	EndIf
	$Status = DllCall($gdiplusOpen, "int", "GdipGetImageHeight", "hwnd", $image, "int*", 0)
	If Not @error Then
		If $Status[0] = 0 Then $ImageHeight = $Status[2]
	EndIf
	$Status = DllCall($gdiplusOpen, "int", "GdipGetImageType", "hwnd", $image, "int*", 0)
	If Not @error Then
		Local $CaseMsg = $Status[2]
		Select
			Case $CaseMsg = 0
				$ImageType = "ImageTypeUnknown"
			Case $CaseMsg = 1
				$ImageType = "ImageTypeBitmap"
				$Status = DllCall($gdiplusOpen, "int", "GdipCreateHBITMAPFromBitmap", "hwnd", $image, "int*", 0, "int", 0)
				If Not @error Then
					If ($Status[0] = 0) Then $HBITMAP = $Status[2]
				EndIf
			Case $CaseMsg = 2
				$ImageType = "ImageTypeMetafile"
				Local $metafile = $image
				$Status = DllCall($gdiplusOpen, "int", "GdipGetHemfFromMetafile", "hwnd", $metafile, "int*", 0)
				If Not @error Then
					If ($Status[0] = 0) Then $HENHMETAFILE = $Status[2]
				EndIf
		EndSelect
	EndIf
	If $GDIPlus_ShutDown = True Then
		DllCall($gdiplusOpen, "int", "GdiplusShutdown", "ptr", $LPVOID_token)
		DllClose($gdiplusOpen)
		$GdiPlus_Dll_Hwnd = 0
		$GdiPlus_Token = 0
	Else
		$GdiPlus_Dll_Hwnd = $gdiplusOpen
		$GdiPlus_Token = $LPVOID_token
	EndIf
	Dim $ImageArray[2][8]
	$ImageArray[0][0] = "imageobject"
	$ImageArray[0][1] = "HBITMAP"
	$ImageArray[0][2] = "HENHMETAFILE"
	$ImageArray[0][3] = "ImageType"
	$ImageArray[0][4] = "ImageWidth"
	$ImageArray[0][5] = "ImageHeight"
	$ImageArray[0][6] = "GdiPlus Dll Hwnd "
	$ImageArray[0][7] = "GdiPlus Token"
	$ImageArray[1][0] = $image
	$ImageArray[1][1] = $HBITMAP
	$ImageArray[1][2] = $HENHMETAFILE
	$ImageArray[1][3] = $ImageType
	$ImageArray[1][4] = $ImageWidth
	$ImageArray[1][5] = $ImageHeight
	$ImageArray[1][6] = $GdiPlus_Dll_Hwnd
	$ImageArray[1][7] = $GdiPlus_Token
	Return $ImageArray
EndFunc   ;==>LoadImageFrom_BinaryData
