Moderators SmOke_N Posted October 14, 2012 Moderators Share Posted October 14, 2012 (edited) I know there are snippet threads, but I'd like this one to be specific.I've see quite a few neat GDI+ code snippets (UEZ and Progandy come to mind first) to manipulate, create, etc, and I thought it'd be neat to be able to find them under one thread.I'm going to reserve the next 3 posts because I'm unsure at the moment if it's the "Quote" or "Spoiler" bbcode tags that has the 10 limit.You can link or post the snippets you find or create and I'll title them and put them in the threads for everyone to find. ( Going to have to remember to edit with regular editor! )Some of these may not have titles, so I may create my own, if the author(s) want(s) a different one, let me know._GDIPlus_WaterMark.au3 - Author: UEZ - Added: 2012-10-13 - Updated:expandcollapse popup;coded by UEZ build 2012-08-10 beta ;updated by UEZ ( x&y position ) 2012-10-13 beta #include-once #include <GDIPlus.au3> #cs - Example _GDIPlus_Startup() $sIn = StringReplace(@AutoItExe, "autoit3.exe", "ExamplesGUImsoobe.jpg") $sOut = @ScriptDir & "Watermarked.jpg" $r = _GDIPlus_WatermarkImage($sIn, $sOut, "Watermarked by UEZ", 170, 50, "Arial", 64, 45) _GDIPlus_Shutdown() If $r Then ShellExecute($sOut) Exit #ce ;====================================================================================== ; Function Name: _GDIPlus_WatermarkImage ; Description: adds a text to an image ; ; Parameters: $sBitmapFile: image file to load ; $sSave: filename for saved image -> if no extension (jpg, bmp, png, gif, tif) is given the default is png image format ; $sText: text string to draw onto the image ; $iX: x position of the text on the image ; $iY: y position of the text on the image ; $sFontName: font name to use ; $iFontSize: size of the font ; Optional: $fAngle: angle of the text -> 0° - 359° ; $iFontColor: color of the text ; $fAlpha: alpha channel of the text -> 0.0 (transparent) - 1.0 (opaque) ; $iJPGQuality: JPG save quality -> 0 (worst) - 100 (best) ; ; Requirement(s): GDIPlus.au3 ; Return Value(s): Success: 1 ; Error: ; Error codes: 1: image file to load not found ; 2: unable to create bitmap from loaded image ; 3: unable to save watermarked image ; ; Remark: don't forget to start _GDIPlus_Startup() / _GDIPlus_Shutdown() ; ; Author(s): UEZ ; Version: v0.99 Build 2012-10-13 Beta ;======================================================================================= Func _GDIPlus_WatermarkImage($sBitmapFile, $sSave, $sText, $iX, $iY, $sFontName, $iFontSize, $fAngle = 0, $iFontColor = 0xFFFFFF, $fAlpha = 0.04, $iJPGQuality = 90) If Not FileExists($sBitmapFile) Then Return SetError(1, 0, 0) Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sBitmapFile) If Not $hBitmap Then Return SetError(2, 0, 0) If $fAlpha < 0 Then $fAlpha = 0 If $fAlpha > 1 Then $fAlpha = 1 Local $hCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) Local $hBrush = _GDIPlus_BrushCreateSolid(BitShift(Int($fAlpha * 0xFF), -24) + $iFontColor) Local $hFormat = _GDIPlus_StringFormatCreate() Local $hFamily = _GDIPlus_FontFamilyCreate($sFontName) Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, 0) Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0) Local $aMeasure = _GDIPlus_GraphicsMeasureString($hCtxt, $sText, $hFont, $tLayout, $hFormat) If Not $fAngle Then _GDIPlus_GraphicsSetSmoothingMode($hCtxt, 2) DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt, "int", 4) DllStructSetData($tLayout, "x", $iX) DllStructSetData($tLayout, "y", $iY) _GDIPlus_GraphicsDrawStringEx($hCtxt, $sText, $hFont, $tLayout, $hFormat, $hBrush) Else $fAngle = Mod($fAngle, 360) Local $iW = Int(DllStructGetData($aMeasure[0], "width") * 2), $iH = Int(DllStructGetData($aMeasure[0], "height") * 2), $iQ If $iW > $iH Then $iQ = $iW Else $iQ = $iH EndIf Local $hBitmap_Rot = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iQ, "int", $iQ, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) $hBitmap_Rot = $hBitmap_Rot[6] Local $hCtxt_Rot = _GDIPlus_ImageGetGraphicsContext($hBitmap_Rot) _GDIPlus_GraphicsSetSmoothingMode($hCtxt_Rot, 2) DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt_Rot, "int", 4) Local $hMatrix = _GDIPlus_MatrixCreate() _GDIPlus_MatrixTranslate($hMatrix, $iQ / 2, $iQ / 2) _GDIPlus_MatrixRotate($hMatrix, $fAngle, False) _GDIPlus_MatrixTranslate($hMatrix, -$iQ / 2, -$iQ / 2) _GDIPlus_GraphicsSetTransform($hCtxt_Rot, $hMatrix) DllStructSetData($tLayout, "x", $iQ / 2) DllStructSetData($tLayout, "y", $iQ / 2) _GDIPlus_GraphicsDrawStringEx($hCtxt_Rot, $sText, $hFont, $tLayout, $hFormat, $hBrush) _GDIPlus_GraphicsDrawImageRect($hCtxt, $hBitmap_Rot, $iX - $iQ / 2, $iY - $iQ / 2, $iQ, $iQ) _GDIPlus_MatrixDispose($hMatrix) _GDIPlus_GraphicsDispose($hCtxt_Rot) _GDIPlus_BitmapDispose($hBitmap_Rot) EndIf Local $bRes If StringRight($sSave, 4) = ".jpg" Then Local Const $sCLSID = _GDIPlus_EncodersGetCLSID("JPG") Local $tParams = _GDIPlus_ParamInit(1) Local $tData = DllStructCreate("int Quality") If $iJPGQuality < 0 Then $iJPGQuality = 0 If $iJPGQuality > 100 Then $iJPGQuality = 100 DllStructSetData($tData, "Quality", $iJPGQuality) Local $pData = DllStructGetPtr($tData) _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData) Local Const $pParams = DllStructGetPtr($tParams) $bRes = _GDIPlus_ImageSaveToFileEx($hBitmap, $sSave, $sCLSID, $pParams) $tData = 0 $tParams = 0 Else StringRegExp($sSave, ".*.(gif|png|bmp|tif)", 1) If @error Then If StringRight($sSave, 1) = "." Then $sSave &= "png" Else $sSave &= ".png" EndIf EndIf $bRes = _GDIPlus_ImageSaveToFile($hBitmap, $sSave) EndIf Local $err If Not $bRes Then $err = 3 _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hCtxt) _GDIPlus_BitmapDispose($hBitmap) $tLayout = 0 If $err Then Return SetError($err, 0, 0) Return 1 EndFunc_GDIPlus_BMPFromMemory – Author UEZ – Added: 2012-10-14 – Updated:expandcollapse popup; Smoke_N only changed function name #include-once #include <Memory.au3> #include <GDIPlus.au3> ;====================================================================================== ; Function Name: _GDIPlus_BMPFromMemory ; Description: Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap ; ; Parameters: $bImage: the binary string which contains any valid image which is supported by GDI+ ; Optional: $hHBITMAP: if false a bitmap will be created, if true a hbitmap will be created ; ; Remark: hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format ; Don't forget _GDIPlus_Startup() and _GDIPlus_Shutdown() ; ; Requirement(s): GDIPlus.au3, Memory.au3 and _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Return Value(s): Success: handle to bitmap (GDI+ bitmap format) or hbitmap (WinAPI bitmap format), ; Error: 0 ; Error codes: 1: $bImage is not a binary string ; 2: unable to create stream on HGlobal ; 3: unable to create bitmap from stream ; ; Author(s): UEZ ; Additional Code: thanks to progandy for the MemGlobalAlloc and tVARIANT lines and ; Yashied for _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Version: v0.98 Build 2012-08-29 Beta ;======================================================================================= Func _GDIPlus_BMPFromMemory($bImage, $hHBITMAP = False) If Not IsBinary($bImage) Then Return SetError(1, 0, 0) Local $aResult Local Const $memBitmap = Binary($bImage) ;load image saved in variable (memory) and convert it to binary Local Const $len = BinaryLen($memBitmap) ;get length of image Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents If @error Then Return SetError(2, 0, 0) Local Const $hStream = $aResult[3] $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface If @error Then Return SetError(3, 0, 0) Local Const $hBitmap = $aResult[2] Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _ "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak $tMem = 0 $tVARIANT = 0 If $hHBITMAP Then Local Const $hHBmp = _WinAPI_BitmapCreateDIBFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBmp EndIf Return $hBitmap EndFunc ;==>_GDIPlus_BMPFromMemoryExample – Needle Movement (4bit example provided, link to 32bit found in code) – Author: UEZ - Added: 2012-10-14 – Updated:expandcollapse popup;coded by UEZ 2012 build 2012-09-26 ;link to 32bit photo example #include <GUIConstantsEx.au3> #include <Memory.au3> #include <GDIPlus.au3> Opt("GUIOnEventMode", 1) _GDIPlus_Startup() Global Const $hBitmap_bg = Load_BMP_From_Mem(_Speedometer()) Global Const $iW = _GDIPlus_ImageGetWidth($hBitmap_bg), $iH = _GDIPlus_ImageGetHeight($hBitmap_bg) Global Const $hGUI = GUICreate("GDI+ Speedometer by UEZ 2012", $iW / 2, $iH / 2) GUISetBkColor(0xABCDEF, $hGUI) GUISetState() Global Const $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) Global Const $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphic) Global Const $hCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hCtxt, 2) DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt, "int", 4) Global Const $iRadius = 300 Global Const $iNeedle_size = 16 Global Const $fCenter_x = $iW / 2, $fCenter_y = $iH / 2 Global Const $hPen_needle = _GDIPlus_PenCreate(0xFFFF0000, $iNeedle_size) Global Const $hCap = _GDIPlus_ArrowCapCreate(1, 1) _GDIPlus_PenSetCustomEndCap($hPen_needle, $hCap) Global Const $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) Global Const $fRad2Deg = ACos(-1) / 180 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") Global Const $fDegMin = -223.5, $fDegMax = 44 Global $fDeg = $fDegMin, $fAcc = 0.75, $fKMH, $fMPH Do _GDIPlus_GraphicsDrawImageRect($hCtxt, $hBitmap_bg, 0, 0, $iW, $iH) DllCall($ghGDIPDll, "int", "GdipDrawLine", "handle", $hCtxt, "handle", $hPen_needle, "float", $fCenter_x, "float", $fCenter_y, "float", $fCenter_x + Cos($fDeg * $fRad2Deg) * $iRadius, "float", $fCenter_y + Sin($fDeg * $fRad2Deg) * $iRadius) _GDIPlus_GraphicsFillEllipse($hCtxt, $fCenter_x - $iNeedle_size, $fCenter_y - $iNeedle_size, $iNeedle_size * 2, $iNeedle_size * 2, $hBrush) _GDIPlus_GraphicsDrawString($hCtxt, StringFormat("%.3i MPH", $fMPH), 240, 520, "Times New Roman", 24) _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iW / 2, $iH / 2) If $fDeg < $fDegMax Then $fDeg += $fAcc $fKMH = (249.5 + $fDeg) / 1.33333 $fMPH = Int($fKMH * 0.621371) $fAcc *= 1.005^2 EndIf Until Not Sleep(20) Func _Exit() _GDIPlus_BrushDispose($hBrush) _GDIPlus_ArrowCapDispose($hCap) _GDIPlus_PenDispose($hPen_needle) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_GraphicsDispose($hCtxt) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_BitmapDispose($hBitmap_bg) _GDIPlus_Shutdown() GUIDelete() Exit EndFunc #region ;====================================================================================== ; Function Name: Load_BMP_From_Mem ; Description: Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap ; ; Parameters: $bImage: the binary string which contains any valid image which is supported by GDI+ ; Optional: $hHBITMAP: if false a bitmap will be created, if true a hbitmap will be created ; ; Remark: hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format ; Don't forget _GDIPlus_Startup() and _GDIPlus_Shutdown() ; ; Requirement(s): GDIPlus.au3, Memory.au3 and _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Return Value(s): Success: handle to bitmap (GDI+ bitmap format) or hbitmap (WinAPI bitmap format), ; Error: 0 ; Error codes: 1: $bImage is not a binary string ; 2: unable to create stream on HGlobal ; 3: unable to create bitmap from stream ; ; Author(s): UEZ ; Additional Code: thanks to progandy for the MemGlobalAlloc and tVARIANT lines and ; Yashied for _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Version: v0.98 Build 2012-08-29 Beta ;======================================================================================= Func Load_BMP_From_Mem($bImage, $hHBITMAP = False) If Not IsBinary($bImage) Then Return SetError(1, 0, 0) Local $aResult Local Const $memBitmap = Binary($bImage) ;load image saved in variable (memory) and convert it to binary Local Const $len = BinaryLen($memBitmap) ;get length of image Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents If @error Then Return SetError(2, 0, 0) Local Const $hStream = $aResult[3] $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface If @error Then Return SetError(3, 0, 0) Local Const $hBitmap = $aResult[2] Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _ "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak $tMem = 0 $tVARIANT = 0 If $hHBITMAP Then Local Const $hHBmp = _WinAPI_BitmapCreateDIBFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBmp EndIf Return $hBitmap EndFunc ;==>Load_BMP_From_Mem Func _WinAPI_BitmapCreateDIBFromBitmap($hBitmap) ;create 32-bit bitmap v5 (alpha channel supported) Local $tBIHDR, $aRet, $tData, $pBits, $hResult = 0 $aRet = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0) If (@error) Or ($aRet[0]) Then Return 0 $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $aRet[2], $aRet[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB) $pBits = DllStructGetData($tData, 'Scan0') If Not $pBits Then Return 0 $tBIHDR = DllStructCreate( 'dword bV5Size;long bV5Width;long bV5Height;word bV5Planes;word bV5BitCount;dword bV5Compression;' & _ ;http://msdn.microsoft.com/en-us/library/windows/desktop/dd183381(v=vs.85).aspx 'dword bV5SizeImage;long bV5XPelsPerMeter;long bV5YPelsPerMeter;dword bV5ClrUsed;dword bV5ClrImportant;' & _ 'dword bV5RedMask;dword bV5GreenMask;dword bV5BlueMask;dword bV5AlphaMask;dword bV5CSType;' & _ 'int bV5Endpoints[3];dword bV5GammaRed;dword bV5GammaGreen;dword bV5GammaBlue;dword bV5Intent;' & _ 'dword bV5ProfileData;dword bV5ProfileSize;dword bV5Reserved') DllStructSetData($tBIHDR, 'bV5Size', DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 'bV5Width', $aRet[2]) DllStructSetData($tBIHDR, 'bV5Height', $aRet[3]) DllStructSetData($tBIHDR, 'bV5Planes', 1) DllStructSetData($tBIHDR, 'bV5BitCount', 32) DllStructSetData($tBIHDR, 'bV5Compression', 0) ; $BI_BITFIELDS = 3, $BI_RGB = 0, $BI_RLE8 = 1, $BI_RLE4 = 2, $RGBA = 0x41424752 DllStructSetData($tBIHDR, 'bV5SizeImage', $aRet[3] * DllStructGetData($tData, 'Stride')) DllStructSetData($tBIHDR, 'bV5AlphaMask', 0xFF000000) DllStructSetData($tBIHDR, 'bV5RedMask', 0x00FF0000) DllStructSetData($tBIHDR, 'bV5GreenMask', 0x0000FF00) DllStructSetData($tBIHDR, 'bV5BlueMask', 0x000000FF) DllStructSetData($tBIHDR, 'bV5CSType', 2) ; LCS_WINDOWS_COLOR_SPACE = 2 DllStructSetData($tBIHDR, 'bV5Intent', 4) ; $LCS_GM_IMA $hResult = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBIHDR), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0) If (Not @error) And ($hResult[0]) Then DllCall('gdi32.dll', 'dword', 'SetBitmapBits', 'ptr', $hResult[0], 'dword', $aRet[2] * $aRet[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0')) $hResult = $hResult[0] Else $hResult = 0 EndIf _GDIPlus_BitmapUnlockBits($hBitmap, $tData) $tData = 0 $tBIHDR = 0 Return $hResult EndFunc ;==>_WinAPI_BitmapCreateDIBFromBitmap ;Code below was generated by: File to Base64 String Code Generator v1.10 Build 2012-09-08 Func _Speedometer($bSaveBinary = False) Local $Speedometer $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= 'gdEYf4PQPJwDR8bmnv/aUr2lvUprmhiDJtY1I9asrDjLd1uVLxzrBpn9HIizDcNzIvwmFmfhtaWulk4kH5WGtZY196i6aaJAE61muDRZLAqY+4vVRSuP4gwrRmQl5TnGFEq8RoleqrhNpcKWTuWzXll7cXma6SkKNIlrBZFlVICZ1EVTmGF9yhJW6W4MfO5c3cfdnxNn1v23XvWxguu8NFK+KG15axqPRU40O4vlM+iXx0K1ZcH0uCbWFgOktY8rPrVahI0xKl9AVfXj4gcR0VGR04x4oVFdltwDY49DQjeJgXt+5NSp5r3bt4/tKMHPeT+kbFFaWrSx5hWeN4ybyIrH4/3H9/dYt772nUvL75udQxRoJgK0G96i58JSfJNhEUNcsrmvURfNMhgFGlFjzeqOE97/jDIlQ7IpEYgr74+gbMgsw8A4jDtL2ParVFHatec3xbY7616RDM52fKw4JDNXOFSSQMABYLEjCQSii1OGJgKwCGKRYGFBpFVgRSsfiyYIsZUlThhfA5I/ED1kPPK8CCxiDrFc8f3GxCOHk4y/L8nFCxcaKVCUtkBLp9yEEQ4ey/vX5SkKNPto0sSXTbBvjBHuqe7Gh2ArbUXrk9HJqVVGiZtpRQxiCmtT9gaIJYrnxQLH53zu3Lnl993DAhefKV8Zn1gbnth/Ardmew0JLs+1toF1raa1RvWxrtZQVqNXPBzjnzV73h0IRBenLs02EWAxQAwR8xWdWgsvdlha1i5f8NLBwXh1qBRpbDyMk9HcqFwdFlhC2Jj5fsD9jmkNQ6CG+xsTYV73cXkXF5OH+oNyqEkdaHR5akETXZrpyvyHrFKlXZ0IrnqsaIq0UWKL2JSyY9ICk1jDuO9J7s/s4T7joGjsLGOCw2RGqQ/mGAeGubg8RYFmk3NaieRZNsIpLpxAq3F1cgLNOG3XiQS3OhaHDVtdCxRULoxFaVknqssyxbU55FCKy5O1fUtdnqJA06VJdhAuyA269TiBVheAj/icXXcBS3ew+W5SxOPeIj5u5Xw4zmU0oLr7NGPMMdJ3nSh52MC1ubFewfwea/u7b97atsK2okDTpdkvGDbf1fnNr3xja7oLEGzb1I6lO3pbxRgDXIzPwxeb81D3FrXN+lJXyx7HCONjQlKdMUiqybeyhuLitbs8xSQBYVOgVQjm7+Tkz3d1skCWrzUWJzHMvS6apIvWZn6u+cVlmYcyUSZkeqwUTQ7CwzBmvCZjk9haDp7P/OCZGjOIRQua8WbEV40mzuJFgYVv6lY59uhUmAVxNiGU78BNtQp+3r0QD7izRsWitNvQ0gk3LB6GyAMxRrIU1jT6Kc8gLk20oNkVIBcWviDKwkbGfVTeXYD/s21WNMkfZ0M/c8YLY4vryH+vDVs6BVdiwd6giylbTFVWikMUaIqzlMl8QlcnGxVWhGIBuT88OKAu2lqWmK3D4G/GV26fzUVrbWWMdsdyoqYer11HBqnlXNa2UuJR4DOvwLXJmoOAmuL9YQ6xN5QUaaKL05MkNXES8TGTuzqJBeP0WGNdNO6VTRLri9YzyzMkxk4uI76GIg1XIfO5QusZSVMI+lKuVtblUvXSRIFmMkDbsqmGBZ+Fp6IYL6wjxwmzyjdJwV1fdOzU/9wSSk0wr5nfK0VcKdcmiUiHOhhMLBZDvTRE2kRZxaJAMxmAQFBM5YUtQJF7KBBcnYVi0aoVZpJuv0Nh5ckbvIexQ620jYmptsk7z8lzyzhChPmNRa14S6c4WYoxgEWr2NqMUCWreDuTB2Tv3vv3mu1AcUZhQsRZpYHbKzOWSghJ0s5JN6/PjWkG3joV91txf+fOnbZhOZa1lV/XhXgcXm/oPfO74f7D4+rGmDGMCKIK18DypUnOnz/f7D++P4arVRRoJgOw8FRLHLhdpCSCiEiBQ2GUZBKSUepKwNlc8oDo4lSchWSAyuG0WMzVKSJSfyP0okldZ86c2WB7KFGgmam5NfFTmPJXZXXOBhGRdPu4aj0H' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= 'ALC2qX3hDAFNSKubB4Z1Lw3AZoBmbVNLOzUR0DQPZHXHsDYPANgMkGd/R5oBcAdN80D/76UBuG/WoWYAVNCsh6rvpfXzyBPA8NkOr21CQLN5oCdHngA898Sz+eLdhvtmOOLEvDQAR5qbFzZHPZ5vhoBmXlq+dZ3fPF+6A8DKpv6P0MARp1Ec3TjyBNClOZQjTVTQaMrkcX33eouPPAF0aTbXU0q/oYJGPui5wxB5AGSpbmsAWHRed2kOLZwhoBnF0Rx55m5ayuj5xlbWBkDVLM/iPJMdaeKIs6HLc40NBAB2aeZ+8MSRJipoqKbFyhsIAMw2a8LZ5JEmKmjwwYfvjy6/frlcu727wgYCAOMzskvzxVdeLAcPHJodzhDQMDMtzQQ7v9kpiwWgESDP2U812wxHnJiZliXruQeRu2n7H92fb3plfgCqZnUjQJ61c4QzVNDQQDBPNQ2Ajec38qV3cVUzVNDQQFBX09JttHcAxmfk2Zln6FLHZ6CChrtpeci8c+ud8mAAgll1CrG8JecIaHDrn7dGV65cKVkV1ZTpty9ulwcDMNfs3Llz5fiXjq8snCGgoZpmJEcFUDVr9h2v864Z7qCh09NOzwpgh2bCWeaarb1DExU0HHumlN/IQ+nUmdNlYAADZ5uVea07zkRAw0iOepfcEI49AceZndmhiYCGJoK+z04DbALodhMAAhqaCFLyP795vvQEoDuz800AaBJAE0EeaFlv0tmVUYDjzDzDmnCW04G+NQGggoZjzwxr7NL9NMCw2bYdZyKggSG3gHtmJ06cUDFDQFst3E8DcM8Md9BwPy1HnfX9NEvYAffM2gAVNPjgw/dHv3zjjdKW+WmAeWYJZt954YVy8MChJpiBgIb7aSsOaoBg1tEGAAQ00PEJ6MwEAQ2NBDdv3lxKUANUzObvzAQBDUFtrqNPgI3nN3LXdUmdmSCgYTRH24MaoGIGAhqC2mtbW+XUmdMlALJS7tWtrVTe11gxAwENR58G3tbAgNkWVcxAQEPX57BXSIGVTG3rygQBDUHtz7/aLddu75bof+cnuF+WSnpHghkIaAhqN27cSLdWvxsKwAyzjgczENCwQqp+iHf/nhq4+N+zlUwgoKGhoO7o6k5VDRxj9rwjEwQ0NBS0vKoGqmWXX7+cO6UDPcYEAQ3Hny2sqoFqmWNMENBw/LnGqhqYXdZUtqfNLwMBDXR/rmlUB6iWnTx5clXHmCCggaoaCGX5IjR3tQwENHBX7S9vvVWqsDZ+WXmOyho4wvzK008v9G4ZCGjgCHR2ZQ1UytZ3hAkCGlgrFV//4jPla99+ZrBhDZWyKZ+LtYQyENDAEeggK2sIZVVluVNHmCCggbCWl1XfZqzh+LJ7oQwENBDW7vzt39Vxz+TgzVNnTpcuwFT/arDzxPHl0ae+0ItQBgIaaDDoUkcoqmTDuOgPAhoIa3fv3s3Lr/XVNVTJ8iXiyJEjQhkIaOAodOxOz8IDGwJZdWfS0eU0IKCB6tqdO3eal+ZKAhsCWf23dfTo0XmqZICABo5D6/tA9R023CEb+9tZ1rElIKCB49D/vPtumRrYJkcdDCC0CWPjI15iWiD7/OOPL/nYEhDQwJHo+B22WcdXHQ5twtjUY/DJO2RdObIEBDRQZasrKocPH25xtU1V7N69ew/1f1naCxDQgCkv+lkv+1Rfchy2xPAmhCVQpyI29v8ztDAGCGjAjGCwtgAngM3+PZcpAAENENxmBotIuIg6YCTMdTV01b+nyO8qpvy+lhfEAAEN0JBQ7mvC28fvfVTe+/i/UwLJ3gNKPLbvc7nUXmoJLNPk8vteQ+c0+ZlqabrIzxaL+vnqEBZLv7gPCGiAylu5r6m+RRPi6qDTJ3Ww3PfYZ+uKYapgJbpWCQMENECYm6heJdQ1qnAXCw15CVe1OmhFwtZYFW8toQvgE2Bc+n0wJVTiAAAAAElFTkSuQmCC' Local $bString = Binary(_Base64Decode($Speedometer)) If $bSaveBinary Then Local $hFile = FileOpen(@ScriptDir & "Tacho_4bit.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Speedometer Func _Base64Decode($sB64String) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode #endregion Edited October 14, 2012 by SmOke_N Zoldex 1 Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted October 14, 2012 Author Moderators Share Posted October 14, 2012 -Reserved- Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted October 14, 2012 Author Moderators Share Posted October 14, 2012 -Reserved- Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted October 14, 2012 Author Moderators Share Posted October 14, 2012 -Reserved- Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
jaberwacky Posted October 14, 2012 Share Posted October 14, 2012 (edited) Speedometer.au3 Author: UEZexpandcollapse popup;coded by UEZ 2012 build 2012-09-26 #include <GUIConstantsEx.au3> #include <Memory.au3> #include <GDIPlus.au3> Opt("GUIOnEventMode", 1) _GDIPlus_Startup() Global Const $hBitmap_bg = Load_BMP_From_Mem(_Speedometer()) Global Const $iW = _GDIPlus_ImageGetWidth($hBitmap_bg), $iH = _GDIPlus_ImageGetHeight($hBitmap_bg) Global Const $hGUI = GUICreate("GDI+ Speedometer by UEZ 2012", $iW / 2, $iH / 2) GUISetBkColor(0xABCDEF, $hGUI) GUISetState() Global Const $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) Global Const $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphic) Global Const $hCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hCtxt, 2) DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt, "int", 4) Global Const $iRadius = 300 Global Const $iNeedle_size = 16 Global Const $fCenter_x = $iW / 2, $fCenter_y = $iH / 2 Global Const $hPen_needle = _GDIPlus_PenCreate(0xFFFF0000, $iNeedle_size) Global Const $hCap = _GDIPlus_ArrowCapCreate(1, 1) _GDIPlus_PenSetCustomEndCap($hPen_needle, $hCap) Global Const $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) Global Const $fRad2Deg = ACos(-1) / 180 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") Global Const $fDegMin = -223.5, $fDegMax = 44 Global $fDeg = $fDegMin, $fAcc = 0.75, $fKMH, $fMPH Do _GDIPlus_GraphicsDrawImageRect($hCtxt, $hBitmap_bg, 0, 0, $iW, $iH) DllCall($ghGDIPDll, "int", "GdipDrawLine", "handle", $hCtxt, "handle", $hPen_needle, "float", $fCenter_x, "float", $fCenter_y, "float", $fCenter_x + Cos($fDeg * $fRad2Deg) * $iRadius, "float", $fCenter_y + Sin($fDeg * $fRad2Deg) * $iRadius) _GDIPlus_GraphicsFillEllipse($hCtxt, $fCenter_x - $iNeedle_size, $fCenter_y - $iNeedle_size, $iNeedle_size * 2, $iNeedle_size * 2, $hBrush) _GDIPlus_GraphicsDrawString($hCtxt, StringFormat("%.3i MPH", $fMPH), 240, 520, "Times New Roman", 24) _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iW / 2, $iH / 2) If $fDeg < $fDegMax Then $fDeg += $fAcc $fKMH = (249.5 + $fDeg) / 1.33333 $fMPH = Int($fKMH * 0.621371) $fAcc *= 1.005^2 EndIf Until Not Sleep(20) Func _Exit() _GDIPlus_BrushDispose($hBrush) _GDIPlus_ArrowCapDispose($hCap) _GDIPlus_PenDispose($hPen_needle) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_GraphicsDispose($hCtxt) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_BitmapDispose($hBitmap_bg) _GDIPlus_Shutdown() GUIDelete() Exit EndFunc #region ;====================================================================================== ; Function Name: Load_BMP_From_Mem ; Description: Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap ; ; Parameters: $bImage: the binary string which contains any valid image which is supported by GDI+ ; Optional: $hHBITMAP: if false a bitmap will be created, if true a hbitmap will be created ; ; Remark: hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format ; Don't forget _GDIPlus_Startup() and _GDIPlus_Shutdown() ; ; Requirement(s): GDIPlus.au3, Memory.au3 and _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Return Value(s): Success: handle to bitmap (GDI+ bitmap format) or hbitmap (WinAPI bitmap format), ; Error: 0 ; Error codes: 1: $bImage is not a binary string ; 2: unable to create stream on HGlobal ; 3: unable to create bitmap from stream ; ; Author(s): UEZ ; Additional Code: thanks to progandy for the MemGlobalAlloc and tVARIANT lines and ; Yashied for _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3 ; Version: v0.98 Build 2012-08-29 Beta ;======================================================================================= Func Load_BMP_From_Mem($bImage, $hHBITMAP = False) If Not IsBinary($bImage) Then Return SetError(1, 0, 0) Local $aResult Local Const $memBitmap = Binary($bImage) ;load image saved in variable (memory) and convert it to binary Local Const $len = BinaryLen($memBitmap) ;get length of image Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents If @error Then Return SetError(2, 0, 0) Local Const $hStream = $aResult[3] $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface If @error Then Return SetError(3, 0, 0) Local Const $hBitmap = $aResult[2] Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _ "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak $tMem = 0 $tVARIANT = 0 If $hHBITMAP Then Local Const $hHBmp = _WinAPI_BitmapCreateDIBFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBmp EndIf Return $hBitmap EndFunc ;==>Load_BMP_From_Mem Func _WinAPI_BitmapCreateDIBFromBitmap($hBitmap) ;create 32-bit bitmap v5 (alpha channel supported) Local $tBIHDR, $aRet, $tData, $pBits, $hResult = 0 $aRet = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0) If (@error) Or ($aRet[0]) Then Return 0 $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $aRet[2], $aRet[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB) $pBits = DllStructGetData($tData, 'Scan0') If Not $pBits Then Return 0 $tBIHDR = DllStructCreate( 'dword bV5Size;long bV5Width;long bV5Height;word bV5Planes;word bV5BitCount;dword bV5Compression;' & _ ;http://msdn.microsoft.com/en-us/library/windows/desktop/dd183381(v=vs.85).aspx 'dword bV5SizeImage;long bV5XPelsPerMeter;long bV5YPelsPerMeter;dword bV5ClrUsed;dword bV5ClrImportant;' & _ 'dword bV5RedMask;dword bV5GreenMask;dword bV5BlueMask;dword bV5AlphaMask;dword bV5CSType;' & _ 'int bV5Endpoints[3];dword bV5GammaRed;dword bV5GammaGreen;dword bV5GammaBlue;dword bV5Intent;' & _ 'dword bV5ProfileData;dword bV5ProfileSize;dword bV5Reserved') DllStructSetData($tBIHDR, 'bV5Size', DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 'bV5Width', $aRet[2]) DllStructSetData($tBIHDR, 'bV5Height', $aRet[3]) DllStructSetData($tBIHDR, 'bV5Planes', 1) DllStructSetData($tBIHDR, 'bV5BitCount', 32) DllStructSetData($tBIHDR, 'bV5Compression', 0) ; $BI_BITFIELDS = 3, $BI_RGB = 0, $BI_RLE8 = 1, $BI_RLE4 = 2, $RGBA = 0x41424752 DllStructSetData($tBIHDR, 'bV5SizeImage', $aRet[3] * DllStructGetData($tData, 'Stride')) DllStructSetData($tBIHDR, 'bV5AlphaMask', 0xFF000000) DllStructSetData($tBIHDR, 'bV5RedMask', 0x00FF0000) DllStructSetData($tBIHDR, 'bV5GreenMask', 0x0000FF00) DllStructSetData($tBIHDR, 'bV5BlueMask', 0x000000FF) DllStructSetData($tBIHDR, 'bV5CSType', 2) ; LCS_WINDOWS_COLOR_SPACE = 2 DllStructSetData($tBIHDR, 'bV5Intent', 4) ; $LCS_GM_IMA $hResult = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBIHDR), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0) If (Not @error) And ($hResult[0]) Then DllCall('gdi32.dll', 'dword', 'SetBitmapBits', 'ptr', $hResult[0], 'dword', $aRet[2] * $aRet[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0')) $hResult = $hResult[0] Else $hResult = 0 EndIf _GDIPlus_BitmapUnlockBits($hBitmap, $tData) $tData = 0 $tBIHDR = 0 Return $hResult EndFunc ;==>_WinAPI_BitmapCreateDIBFromBitmap ;Code below was generated by: File to Base64 String Code Generator v1.10 Build 2012-09-08 Func _Speedometer($bSaveBinary = False) Local $Speedometer $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= 'fuNqfxYAAADAk0sydf6SzQFxEWvQ1Dst41BRXVJJdVDpUGvTaggAABDI1i4Jiy1LBaxB868/q77Xe2bpTI02DgAAAAKZ//ZEmSqHgGbrz5oCAABAI76y2L1l1t27476Q6RK2Di1TixMAAAC+cV+xyx0BDQAAQC1KLZuqJJAFtziTs6OadhQTAABg2r+WcT24c2cBOce/Di0ooGlOmS1+KwMAAADncka+8zc94QwAAAA5n20euVoBAABAlOeAWgAAAIRnq8i3/szlAgAAAMpWyljOIypn/RkAAACUrZSx6rwGDQAAAPUPaAAAAKxDi8rbIAAAAIB77r7b+USlbRAAAACAThLwbhSI6rVBAAAAgI0CkRsOAAAAbBIAAABAVOkGAQAAAHZy+gPa53/4fazdBcUBAADgRAFlLjdE163xyaefups7OGM3xN4n97pNmzYp/fW+dtI2FHz04UcdfTz6ytFYH/W9XLt2zZ06dcrJnj17nCR/ljj68tFv/l99z9luzyy+sxjb7aVNTU256elpe7y/t7fjxG53wgEAwEaB14+9rh2dbpDOhQ8uuLXhQUFklA23bhgYKjZv3twLNA/u3KkbrF1wU1DaNbsrdjl46+TJsb7H+Rfn3cLCgsvLkSNH3MG5g26iAQAAZQQrwngqaKok+ULOwOralStXehe5GUji6oObPQC67af27cvrdnVd+hCfWToz8PtRKj506JDLWXKdzQlpAADAH9AUpEbxDVbLGtxmZmY0UbfQ4KZWrAJVEYb0j9cdzghpAACwUSDyf3F6iG0YC25ag6WwofCk1qNap9u2blPFq1eBev/d95KKXYBCw5Luu+7vsDVnhYa0egMAAMoyyjRav6+Mo6yj3/t011THvDs41QItkFXcjL/ilr0lm2wG0PUpdCqY6noHHsGgz589d65/LZnuj+5nsnkgXWUMYtdffwAAQHlDr//KFFc//Fd3+vKSG+b8+fPqgvU2Wtrxmp4W58OPPuJGUdWrdBbc+m8/ThbrD7vPtlNzsMW3F90Q8Wr4Sz0uWsg3ziaK48ePu1EOHDigUOf9i1b79KXDhy2opb+moo0YAAAQxhS0VlZWktfp2I1J/0+yk3P1evwVNKW+STxwNPWg+NfUqUI1tC2pYJSMHEmqdf2jNkLYpoLRkq/Rbc89PxeXWU0DAABWLFEXTR3EVBgLKDr1ZS9V0tIBLXwHZ/VzRDItwLMHZ+0IjHhEezFe0xq16pvngfffX7/ywhkAALQol5eXLYgVwt8F62bewdkcCmfZApG1ebXAT/3jSgOo2q1qxbYCAEALzb1LjayI4F+83j+kXsHEXhdtSU5S6NCfJwPqMxQcgjbQ6TbqWRULp0yl13B/QPOzBW2pRXDV2L1l1lXCdlFWOu5CT6xWAAB2AvrHRVkRwRfwQgsZcTI4fYzXQHWrFOz0uhm7AAqe4g2f/uHxsaueAu/ITl+3f92VvmiMNGuJz1MaLNq9O+5zUmFI0xOm+IAGAKBqFh7ydD2lFirUbVLIC2bBU2MqrEqYkYbW6/7UgYpcyaQIZTCtOR8Q0GxBvEfm4KYnhK67iOCmQFmF6ne1Wku60QCAo4D0OhOwvqnQ022SgDG0jajbrNNrr20srJ46kP2jvdaeyRml7njONJ5CyVq7Hy9euuiuf3m9t5NR4zFUHlUKth2V2U+Cz+Fsy9RF92nN77POMMu1V97oFicAoOjqk8JZ9tcu+3zGge32+QKpkqYiUOiatiqXaY28T92+XqiCVFzyzkvdZipxq+LWN1ukkAdaTzgFxgHsPtnv7aB1/zsVu8+er6WCBgAYsk5q5Lgmd5Nel4JeH20QvFqGSdcrNXpLf66qVZZF+K54uq+1HgTvGbQ/ctRGN6AaU2Jws/VtyY6L6enpGo768Mv6pNX33Z4KGgAw6sEWsac7PnptzLFFZ9fpH1Y/qlCRvXpm4cVez+21zRMGg+a36vYKCmj2/SS7XYfkg9iNoVv7aoytbwtpg8ZD' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= 'aRBpEQRaySiaGwBG/T4AAJdAeKAyABQTRuHAE6JY8iJtLHqGQJNy1aBSRauy68zy05KeaK8T9KXLl7qNBgAq15wB4NavvTpS+61rsZqLgjSHtIejZwi0KJoa76jXeGHmOrN8Ll682GnC/XaeoAHg/f++32UAABkuCdrPa0TTpDmkPVrkWNcQH/3IxxRF66VoHbVKql/9gftuIqSkr/3yWgcA2YX2EbHjaJUi1DoEaRH2wSp9XepApsVdPzOvyPL7jOM6Nh30DACpzeT162iar6FC0TNpj65BdvZv7Xct8eDh/V51IG9ff3tHU+XLpyS8AVx44ULqOQFIAVr4pK9JP36uVOL4tSQuKCc6+AGQ2lR0rIFrKIg/CzRSnOko2rlz57rXXny1H/CBTVZnpg8+S5wBEDVrMlWozWDkmlDCoiSIPABSmxnXkATeVOuVtIbFGSnOQZx57szOsz97tlfL+xFhTYkqfWBZdWbnnz/fjQYAOwp3PeamF9NRueEn6ngKVGlUpVMH/f4rr1/Rgt2PEXT6GR3waDgAKH/gkrDKad7TGvFY8PWKrneGCNpQ9AG8src35HHr/G5tBhniDAA7inxx5sfqFifuRRai3jEklCzGXMuSxj8/5nXrufQzkf/n1y4AQNeL9uDswn4duiS01o3iZbwGBJqiaKGY8AikokflsKWYc5Q3AKRFy4Q4il7Sn8zCL7/DEx81gOS+rb04p5xAhy5F08aa2+rxQWMg0DI4e/asPc0SRcCpFIQeQ50ZALYUkfRmZUEFANqLs6NpNrcd9XhpC4FAyx8BpWK+5AdtJR71M6sgzACoS1sSTo/4IFcdAKJp2aUAaXNb22roOpe2QKBNMwJK3RvJP7yKdGetMwOgLk2LpITa0rrJvIbUAwAcudZ+ne3MoJTnqoCONIRq12LRM7o480ZA9VpMXfgbj6KFDxe/oeED4O/du+cB0KkmDOftR0YkfYHo50IdwJ07d1J1iOHx/tn5AddqSZTFhFrr6U43Drg+dd4oOwBo79beoDRkjqVN1Nz20k8u9R7phECbcgSUFv3EJo0wy3M8j3N49NaTUxtCq3NKlB3cPuh1wY2wLvBzmb4pV3ZOvKHuLGJr4dquhFCr3+Xo19fe2gEAynrp5gkjayIXiLBOBVuNxHpDijPDvNYpCRjbtSJxVmSG2Tc/942UY7TE2eRpNEUAm4Ji31h6winPkV2OAIAdh2rI18UlC7bVkJZAoM1kuwFxkSSBVIo//uN6xjiPLHHYnkgjPbFKVLcWTV5G9ykA0bS17DgkxnRwTNpqINDq224YuPara31piwQLpfjzlhRpjYMPmiNpuuWMZJt07NJCASBCn14rVHpT1VYDgeaGAZ+AIXuItG5hQ9V97KbHKNS8apM8efLk5osn0AI5VqiFn9F9EG7+93HpDn3/hh4m/DjXuuUcTHyKJ+JWyO4kDRCh13U4ZK0ISCu4MWB57Ozf2u+WxIOH93ulTAYVi4MLLSOnDH2R8xsNPBMxPT/Rjz916pQuGjd9rGguUKenxN7yzVEBEGHqpBsfxbSn5Y0bNzpx4YULXjsGrFt379493MGrNVD3yajtj/f2OtUurdu5PiaroK7648ePOx03qmOepjfrApfZ6N/0+SHQKqbttGkP25xZGIOozRU3aghwzVlaoOWLKqdQ4yLNnaRNA4CJ8dS1iKlDuu0aCmQeLJri69Uzp0/nv18LU1kSsc4l6pwddHBwYnd312KXFGe9hgF9GMOKxMnfBxPAcNMFr/shF4AWVt1rsVvREKATX4E0mVngBQYAFkoSK6WMkVeJpFL1yp7/GBeiOkxO+X71PvQ7I93Q7G2hXMJdm/78E3sHPmgVGgZsZtquIWxrJx+lFiW4+qtXr6Z8ZnrfjyZbzC0+xA8AhRu7bGJdtQY2HekvIUjjGQNq0/wd8MSAPmLRQQStcsNAg95oXjR0utMFq1BrddLeZBZnmfiU4uegiBgAatgiaT2bS3TWFoU0' $Speedometer &= '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' $Speedometer &= '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' $Speedometer &= 'ALC2qX3hDAFNSKubB4Z1Lw3AZoBmbVNLOzUR0DQPZHXHsDYPANgMkGd/R5oBcAdN80D/76UBuG/WoWYAVNCsh6rvpfXzyBPA8NkOr21CQLN5oCdHngA898Sz+eLdhvtmOOLEvDQAR5qbFzZHPZ5vhoBmXlq+dZ3fPF+6A8DKpv6P0MARp1Ec3TjyBNClOZQjTVTQaMrkcX33eouPPAF0aTbXU0q/oYJGPui5wxB5AGSpbmsAWHRed2kOLZwhoBnF0Rx55m5ayuj5xlbWBkDVLM/iPJMdaeKIs6HLc40NBAB2aeZ+8MSRJipoqKbFyhsIAMw2a8LZ5JEmKmjwwYfvjy6/frlcu727wgYCAOMzskvzxVdeLAcPHJodzhDQMDMtzQQ7v9kpiwWgESDP2U812wxHnJiZliXruQeRu2n7H92fb3plfgCqZnUjQJ61c4QzVNDQQDBPNQ2Ajec38qV3cVUzVNDQQFBX09JttHcAxmfk2Zln6FLHZ6CChrtpeci8c+ud8mAAgll1CrG8JecIaHDrn7dGV65cKVkV1ZTpty9ulwcDMNfs3Llz5fiXjq8snCGgoZpmJEcFUDVr9h2v864Z7qCh09NOzwpgh2bCWeaarb1DExU0HHumlN/IQ+nUmdNlYAADZ5uVea07zkRAw0iOepfcEI49AceZndmhiYCGJoK+z04DbALodhMAAhqaCFLyP795vvQEoDuz800AaBJAE0EeaFlv0tmVUYDjzDzDmnCW04G+NQGggoZjzwxr7NL9NMCw2bYdZyKggSG3gHtmJ06cUDFDQFst3E8DcM8Md9BwPy1HnfX9NEvYAffM2gAVNPjgw/dHv3zjjdKW+WmAeWYJZt954YVy8MChJpiBgIb7aSsOaoBg1tEGAAQ00PEJ6MwEAQ2NBDdv3lxKUANUzObvzAQBDUFtrqNPgI3nN3LXdUmdmSCgYTRH24MaoGIGAhqC2mtbW+XUmdMlALJS7tWtrVTe11gxAwENR58G3tbAgNkWVcxAQEPX57BXSIGVTG3rygQBDUHtz7/aLddu75bof+cnuF+WSnpHghkIaAhqN27cSLdWvxsKwAyzjgczENCwQqp+iHf/nhq4+N+zlUwgoKGhoO7o6k5VDRxj9rwjEwQ0NBS0vKoGqmWXX7+cO6UDPcYEAQ3Hny2sqoFqmWNMENBw/LnGqhqYXdZUtqfNLwMBDXR/rmlUB6iWnTx5clXHmCCggaoaCGX5IjR3tQwENHBX7S9vvVWqsDZ+WXmOyho4wvzK008v9G4ZCGjgCHR2ZQ1UytZ3hAkCGlgrFV//4jPla99+ZrBhDZWyKZ+LtYQyENDAEeggK2sIZVVluVNHmCCggbCWl1XfZqzh+LJ7oQwENBDW7vzt39Vxz+TgzVNnTpcuwFT/arDzxPHl0ae+0ItQBgIaaDDoUkcoqmTDuOgPAhoIa3fv3s3Lr/XVNVTJ8iXiyJEjQhkIaOAodOxOz8IDGwJZdWfS0eU0IKCB6tqdO3eal+ZKAhsCWf23dfTo0XmqZICABo5D6/tA9R023CEb+9tZ1rElIKCB49D/vPtumRrYJkcdDCC0CWPjI15iWiD7/OOPL/nYEhDQwJHo+B22WcdXHQ5twtjUY/DJO2RdObIEBDRQZasrKocPH25xtU1V7N69ew/1f1naCxDQgCkv+lkv+1Rfchy2xPAmhCVQpyI29v8ztDAGCGjAjGCwtgAngM3+PZcpAAENENxmBotIuIg6YCTMdTV01b+nyO8qpvy+lhfEAAEN0JBQ7mvC28fvfVTe+/i/UwLJ3gNKPLbvc7nUXmoJLNPk8vteQ+c0+ZlqabrIzxaL+vnqEBZLv7gPCGiAylu5r6m+RRPi6qDTJ3Ww3PfYZ+uKYapgJbpWCQMENECYm6heJdQ1qnAXCw15CVe1OmhFwtZYFW8toQvgE2Bc+n0wJVTiAAAAAElFTkSuQmCC' Local $bString = Binary(_Base64Decode($Speedometer)) If $bSaveBinary Then Local $hFile = FileOpen(@ScriptDir & "Tacho_4bit.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Speedometer Func _Base64Decode($sB64String) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode #endregion Edited October 14, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum? Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted October 14, 2012 Author Moderators Share Posted October 14, 2012 @LaCastiglione Thanks for the link, not sure what "udf snippet" you want me to do. But I'm not going to create the udf snippet, or guess, so if you want to put it together out UEZ's code, do so and post it with appropriate credits. Thanks Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
jaberwacky Posted October 14, 2012 Share Posted October 14, 2012 Thought I had a link to the specific post. Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum? Link to comment Share on other sites More sharing options...
UEZ Posted October 18, 2012 Share Posted October 18, 2012 (edited) Here another one besides the snippets I sent per pm to SmOke_N. _GDIPlus_SaveImage2BinaryString.au3 Func _GDIPlus_SaveImage2BinaryString($hBitmap, $iQuality = 50, $bSave = False, $sFilename = "Converted.jpg") ;coded by Andreik, modified by UEZ Local $sImgCLSID = _GDIPlus_EncodersGetCLSID("jpg") Local $tGUID = _WinAPI_GUIDFromString($sImgCLSID) Local $pEncoder = DllStructGetPtr($tGUID) Local $tParams = _GDIPlus_ParamInit(1) Local $tData = DllStructCreate("int Quality") DllStructSetData($tData, "Quality", $iQuality) ;quality 0-100 Local $pData = DllStructGetPtr($tData) _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData) Local $pParams = DllStructGetPtr($tParams) Local $hStream = DllCall("ole32.dll", "uint", "CreateStreamOnHGlobal", "ptr", 0, "bool", True, "ptr*", 0) ;http://msdn.microsoft.com/en-us/library/ms864401.aspx If @error Then Return SetError(1, 0, 0) $hStream = $hStream[3] DllCall($ghGDIPDll, "uint", "GdipSaveImageToStream", "ptr", $hBitmap, "ptr", $hStream, "ptr", $pEncoder, "ptr", $pParams) _GDIPlus_BitmapDispose($hBitmap) Local $hMemory = DllCall("ole32.dll", "uint", "GetHGlobalFromStream", "ptr", $hStream, "ptr*", 0) ;http://msdn.microsoft.com/en-us/library/aa911736.aspx If @error Then Return SetError(2, 0, 0) $hMemory = $hMemory[2] Local $iMemSize = _MemGlobalSize($hMemory) Local $pMem = _MemGlobalLock($hMemory) $tData = DllStructCreate("byte[" & $iMemSize & "]", $pMem) Local $bData = DllStructGetData($tData, 1) Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data;ptr") Local $aCall = DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms221473(v=vs.85).aspx _MemGlobalFree($hMemory) If $bSave Then Local $hFile = FileOpen(@ScriptDir & "" & $sFilename, 18) FileWrite($hFile, $bData) FileClose($hFile) EndIf Return $bData EndFunc ;==>_GDIPlus_SaveImage2BinaryString Reads a GDI+ bitmap from a handle and converts the bitmap to a JPG image in the memory. The result is a binary string of the JPG image which can be saved somewhere else. Example can be found here: The code is based on Andreik's HBITMAP_To_Bytes function which can be found here: Br, UEZ Edited October 18, 2012 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
iamtheky Posted October 18, 2012 Share Posted October 18, 2012 I got great use out of this one, when i needed to show that something was still working, but no actual percentage of progress was able to be provided. All credit is UEZ and Malkey, I merely had the need. ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now