Jump to content
timmy2

Need help adding text atop a GDI+ object

Recommended Posts

The following script, thanks largely to @UEZ, displays the attached PNG image on the Windows Desktop.

Using-Note.png.70ce82c03b4c5773c3dbe7c5858bddc5.png

It perfectly renders the sticky note's shadow over whatever's in the background.

But here's the catch: I would like to add a line of text, fetched from a variable and using a font of my choice, atop the sticky note. It needs to be part of the same GUI because the sticky note can be dragged and placed anywhere on the screen.

Will someone here show me how to add just the additional code needed to accomplish my goal? I have tried sporadically for two years to merge in code from scripts that use GDI+ calls to display text over alpha channels but the challenge has proven beyond me.

#include <ButtonConstants.au3>
#include <MsgBoxConstants.au3>
#include <StructureConstants.au3>
#include <WinAPIConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPISysWin.au3>

_GDIPlus_Startup()
Global Const $SC_DRAGMOVE = 0xF012
Global $iW, $iH, $hImage, $hBitmap, $hGUI
$hImage = _GDIPlus_BitmapCreateFromFile("Using-Note.png")
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
$hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST))
GUISetState()
_WinAPI_BitmapDisplayTransparentInGUI($hBitmap, $hGUI)


GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_WinAPI_DeleteObject($hBitmap)
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_Shutdown()
GUIDelete()

Func _WinAPI_BitmapDisplayTransparentInGUI(ByRef $hHBitmap, ByRef $hGUI, $iOpacity = 0xFF, $bReleaseGDI = True)
    If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0)
    Local $tDim = DllStructCreate($tagBITMAP)
    If Not _WinAPI_GetObject($hHBitmap, DllStructGetSize($tDim), DllStructGetPtr($tDim)) Then Return SetError(2, 0, 0)
    Local $tSize = DllStructCreate($tagSIZE), $tSource = DllStructCreate($tagPOINT), $tBlend = DllStructCreate($tagBLENDFUNCTION)
    Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap)
    $tSize.X = $tDim.bmWidth
    $tSize.Y = $tDim.bmHeight
    $tBlend.Alpha = $iOpacity
    $tBlend.Format = 1
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteDC($hMemDC)
    If $bReleaseGDI Then _WinAPI_DeleteObject($hHBitmap)
    Return True
EndFunc

Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
EndFunc   ;==>_WM_LBUTTONDOWN

 

Share this post


Link to post
Share on other sites

Try this:

#include <ButtonConstants.au3>
#include <MsgBoxConstants.au3>
#include <StructureConstants.au3>
#include <WinAPIConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPISysWin.au3>

_GDIPlus_Startup()
Global Const $SC_DRAGMOVE = 0xF012
Global $iW, $iH, $hImage, $hBitmap, $hGUI
$hImage = _GDIPlus_BitmapCreateFromMemory(_Image())
_AddText2Img($hImage, @UserName)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
$hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST))
GUISetState()
_WinAPI_BitmapDisplayTransparentInGUI($hBitmap, $hGUI)


GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_WinAPI_DeleteObject($hBitmap)
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_Shutdown()
GUIDelete()

Func _AddText2Img($hImage, $sText, $iX = 5, $iY = 70, $sFontName = "Comic Sans MS", $fSize = 22, $iColor = 0xF00F5000)
    Local Const $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 4)
    _GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 3)
    Local Const $hBrush = _GDIPlus_BrushCreateSolid($iColor)
    Local Const $hFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hFormat, 1) ;center text horizontally
    Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFontName)
    Local Const $hFont = _GDIPlus_FontCreate($hFamily, $fSize)
    Local Const $aDim = _GDIPlus_ImageGetDimension($hImage)
    Local Const $tLayout = _GDIPlus_RectFCreate($iX, $iY, $aDim[0], $aDim[1])
    _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $tLayout, $hFormat, $hBrush)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphic)
EndFunc

Func _WinAPI_BitmapDisplayTransparentInGUI(ByRef $hHBitmap, ByRef $hGUI, $iOpacity = 0xFF, $bReleaseGDI = True)
    If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0)
    Local $tDim = DllStructCreate($tagBITMAP)
    If Not _WinAPI_GetObject($hHBitmap, DllStructGetSize($tDim), DllStructGetPtr($tDim)) Then Return SetError(2, 0, 0)
    Local $tSize = DllStructCreate($tagSIZE), $tSource = DllStructCreate($tagPOINT), $tBlend = DllStructCreate($tagBLENDFUNCTION)
    Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap)
    $tSize.X = $tDim.bmWidth
    $tSize.Y = $tDim.bmHeight
    $tBlend.Alpha = $iOpacity
    $tBlend.Format = 1
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteDC($hMemDC)
    If $bReleaseGDI Then _WinAPI_DeleteObject($hHBitmap)
    Return True
EndFunc

Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
EndFunc   ;==>_WM_LBUTTONDOWN

;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2018-02-02

Func _Image($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $Image
    $Image &= 'iVBORw0KGgoAAAANSUhEUgAAAQQAAAEVCAMAAAAxXGsGAAACE1BMVEVHcEwCAgEIBgUEAACcLi4EAwMGAwOHAQ2qARCTAQyRAQmkAQt8CA47LiibARCzAQzAAQ3LAg7WAg/gAhAIBgbrAQ95AAMEAQEZFxIGAwN8AAIEBATl3rUMBgVnY1Lp37XZzqLm26/Mw5rv5bnx6bve1am6sI3r477CHib07MLp3rLVypvXz6zWzKDw5LP37LnZz6XXzaPSyKHg1KTTyJrb0ano3KrZ0Kff7LioWUrfLTzmQVDYzqPHfmnbFya6a1jKn4CTLinl3LTd1K7c06zr4LPe1rDQr43f17Lb0qoFBQXQxJMHAQHtZXPf1rHNxJ3Vyp0DAwMFAgLGvpjCupW+tpLJyqYDAwPIwZy6sY6apX6QnHfZ1bIEAgKmrYi1rYsEAgJziFwEAwNkfk8DAwOBkmgDAwMDAwMDAgIDAwMEAgIDAgIDAgIjIBoEAwMFBATg2LQ2Myzk3Lvn4MFGQzjd063Zz6bx68/j3Lrf1rJeWkv89NPh2bZwbFvi2rj/+9t6dmdUcz8PUAIsXRyytpHh2LWVjnTm379CaS8sXRuNm3EDAgKspYoDAgIDAgIDAgIEAwMKCQjCvKLd2LkDAgIEAwPp48UDAgLt583l3b1VdUHo4cQEAgL999Lr5ckEAwPs5svr48Q5NiwEAgIDAQFfW07q5MfRxphuaVjl3r5NSkHo4cL//+YEAgIDAgIEAgIEAgLeQ1HhAAAAsXRSTlMAAQQQRzYaarjj//+7XJD//////yv//wwISPAlGxcmvKyEbW5ZTFQw/53Q3/P////////+///////////////////////v/////yH/FP////8oQP////8v//////88//9F/1v/S/9OU2hXX2VzhWsd/43//4r//////5P//53//rX//////9b/////b+SAi4+Wn+r/enf/ff////+D4P+T/+WnmYe/'
    $Image &= '///H/6f//0JiMzp0cOCKAAAkbUlEQVR42uSWh5bjIAxFfVNtyBo8TGv//50bSBUeZM85ZutzpaMryUmzpFBK2gBGVav1Zru61XFu4Vwk74+4CSEWqa98ZxoOKBWa3b7tOmO7w484FPK+RXNAsRWlckmhAEFanIm7ht5e1e5GQxBwmUSBuj+qkJiP++ZiRNfWRrl0N3aTTzEdFNyBQwH/S/MClTVZ8vTWOefT6SKG/Uykks4NgjKIpdGg7xAKRmT1bCIC7wd/VMJgNgtGILKeOqkAk7GJ2r93RwJnRQzWtgpdPaWZ9EMFCMVFQCEkmw4RwcNJCYN1G4FSW5U5ScndpmjqCR0zV2sY2df7aH4IIWFIFPpC2s8OSpSd1BRoZQobgmbvQkSQlCg4257Howyc4RakE35XDOjIIJ6PJpr/lI4QEoW2BPZWL9uY/DxSyXQEgvw+Xwf3dFGCMLj9d8MPaaX+RaapKr4IRFkGwS6pf/ZXCE8xI7oXxb26AG0o1SDwnT6M4vO1M+ZGITw9mLevpmVk0AJ7rSEotpQzfGOsNXYIZwr+eS+a/wutemPT32Xnh/jL8P6xrFtYrV6P+ozXT8rLasFBGIii+7yueasFl2kJmbr+/1ftDQx1PRD3U6X1+Bun3emeodftCVp7ALH2fO1r7YPAD0JcQtRkUR2EvmSR85tM+P4KB+78sRPx/KxeIzSgMUSCCbUfortbx9P1gj3dA4iSHgLobukAF6cgw71PnlNf/oQ9YrA9KA6hGpcKxpTWkiFjqcJaNjQcFWxt0x3tDrYjHo+G5ECNQQeajKZKKUjA/+bv2Xw+gwg1HRTssENmImTMiBhYYqkYEeCLXGgrmSHhgecHKLhPAlgsqphuUjIdYCZLBeo3wvfKSfj6eHleTkjOIueRE0ueb0KXW6KnBxAJ/fsl0MMSzGStRAIcVBJWn5CwmfB5CfwwJR8R/TNrFzpuxEAYxwPFtaSFY2Zm9jEzUfD9X6T+PN7E'
    $Image &= 'Bw7uSP2L2yP/NHbAaXw7pKmUG8Fd4wgw8JBPCGoQNMLp0hkbwiAQGjbgR5AnZGAGoWMvRug+Pd9ZQg0jNN4gra8xAn6EnYtTGAhBCOZI0Ajdu5IJYaG3wTFgQvicPNQGyA/DqAMIRwah+0SyICw1iJC2EYYud9gQrtQgAEB4tBuO9mMEpXB6xoMwn6ms839AOL/2tIEv7CMhhAEUrs94ELD6xgzcCGtUAgjyhAwC3zoSIgyCAMKxZDkTFALVKEEmk+FEOPS0QRAAwT4SBBROb3gQ6r/F9Ikg456EteZyIGiD0BfxswQgeIIQVnc4EEbqHwm2AEong+DYDkJogyj08ehgniXQKeF1e5ssCKON7wUA4NWnmoTbrWqJIlxd60EIQ1IwzxIAAwTPuz7nnAT3PYURIAKUZkS4vZ0VZBB1REEwqxBmfcwGEAQrgjtLAASoJ/WLD2FVHmsEunGI1HbYmw2C+Aaq+3RniwFhY7TmefBVQJW6Y0JAN/e+TwgdSGNEkUHwdlkeIleB4L4R+0yAsnwISB77xiDu6OgoDAnhOhmEddWm1Zz7Xjo26DUCRJB9SN9dXvAhXK3O6kmIL17Mc0YcCt4xDFDCCGOOy6K0ZQAAElAED0OZzstzJgQkrwN7Eo72Hx/3CUHsXC1ZJYng7BMBBBTB0K8eXoRVeWJPQhchwACbgQfBef+SBgEyAhgCRfDrV5YJIf4pW/LaGoWj+Elj1eBTTa8f2QjL486PlFUJssgI3N0NPPx8+oRgahGh8g/rqmckn/cIwTDAYPZeri4l2Eu1bSBYDJ8M7H3wCwQDA6+dv94WnxJAsDjU0t9RTpVHhcLJkVaIOswnNI7P5VJC2ZNATdhHoW1QnQIFQAKaoFh8fVs8u1XFCO2lBEpYfp4q6/K5QulwNlKBIJw9XJIXSwkjrFfanHTcgWU+EZCAIvhH3l0wtw0EUQDupbUHO1hSmRlUdJkpMMnYYXaZmbk/ve9WL7Iu8smRpXM8'
    $Image &= '6paJvlnS1ZLHS+NeTggkmNA5wH8/Y3R0ZHhsavqSxNX+mbO9RxhOEPY0fcWrCg0aBIFAabZWWm0gVNJHaKB7gBiECHPzCEGYnJ4a88dmZs7ePY2/qGuEeGgCRESgWl0gqNVnc0MAAQ2IAAKEZEL/3L2pUxNDOmjgDOHInua1IFkAAgQJaFD3vNr9fBCYB9FEmLvayITpB/MBAgncIRzbGmuMyjBAGoCAaTBb8zzvoecOYV4MiPBodGiYBm4Rjm61JAJrIcyDEtPg4eMnj5/mg3BEtgITATGnEaCAwA9pBdcIR/bZJgPGQlODx8+e5IRAA0SkJUhBcEBohAmmgnsEZZaEAsLKCMJCS5Q8eHb/WX4IZjkwEQwEpkJnENTigtALAldEGtTF4PmL5y/zQqCBgYAwMiFIheNpIh0CYnPsDIEjUhqj7AdMBBg8fPLs2fOnL/JDoIIVAZEaYanXDhGVzbHXCTMTglQggjZgMQDhVY6ZEENgSUQRoJAzghn8n/kVMQbpCiYCmuITGLx++spdJnBGhggI9wiHNluvHYggS0KpFiA8u/8iQLiJ6G0VrUdkDIERzYQJ5wi3NtheCI5UiCBgTRKE57kjoCCSEYY6gqD40nojVI+uh7IohAhP0iGcTgyNcMKK4LYxmnFQMoEIRvRga9QDYhHC06evX+eJgFywI7AahtwinASCUQbmlWSQCgFCPX8ENgUgCIEFwXkm+Ad7rK8Q72l0BewJ4aqUG0IFr3oNTpVEwESIrs3uEWwGSgYEVgUgjAcI3sOFTKjkhTBEgjAWI6BlwMA1gu22Xe7OKzVCWA/MhJwQkAYshEYYBiNGIrhFaISK7QrIhEBBI4TLUm92hN7TJ4KOOGlHoAERXAWmg/XWLXaFLeU3fdWqRqjh2iENQrIPKkEMYghGR6CB7zIuHtlmVoJ5oxxbY5n1gM5IhJtAyBQwmLAihMXAyXDkuFuEM9sbBgZCEHIZVZZVgQjP7muEG9czG9gR'
    $Image &= '4rXgu0U43cgEy6kzUiFEgIJGeJEV4bSfhECDiQkS0MBhOWyP3csdP1yRAVGCgiC8wKX020wIvf4JGwL++cGOqAGEoNJGpESobCeAJRQRwlQQhHfXsyNMxBBGUQEyDiscLW1HSgR/e/I9fEpfUUcQ0BRePH0OhBstIrkajpuZQALkgEbwlwtB2e71lXoAQlXPh7oni3MOCEwFIjTqABWAAug0wgHbjbyKXQEXk7o14iqKCPdzQjALAq2QibA8CMkPAEIqDAwAoSoIUg/3MyL0VoBgdoXREAEGHUfYYV0SlGIqNOZDrU6E91kRQgUDQR8c+MuEwLBkQ1APfWyN+SDI0dpYmAuNlgCDjiP4N4jAZIg/X4S7c/kN6oGbwvP77z5kQ8A/UF9GIxcChlEmgtRC5xFu7kh+pATrAZdREYRnH7Mi9J72g+YoDHpF5mxkdBYhVg6K2WD+RwwRSrMWhHTx6dMn/Bs/674wBoYgBXpjVKmjXYRKi56guDBhPnBTeEiEbMH2CAeET4DU4RDBtFA8VpB9SRDuP/l4LDsCQp8u4a9wk7F8CLtsT+RiVRBBDpjkeAlHbHkhMPJGSP+/gzuM1/Tazp0xHwShNFtIhEYmqFgWGFsjTtnWEOFx8RAQyvaUQFIE8wEIemcsIMJOY1GyBeaDLI3BzviwgJmASDZgKkQQvlwfdBydRPB3MeXjTywzd2dBqGJdKhwCyyE5GTgl5XxpvJsQkk0YSzE4SoRkCM6HPkF4+BgIX7+liu5GuLnLuiiaJDIfqsHpkgeEt6nibpPoHgR/t0lgeV6jkn2pvEkPSSB8/1EohOt7LWUQO2riRVQREQZ3tmgHTAk9HwqLcBSZoCwAxsNQOR8KiXAMCC2f8BnWA16+pMdDvQMI7ayd9oOW5BjcbTxS1V4QQT30AaHuFQeBAQQVe2qyDUGGZM2rdTVC+rhJBIbt8eZsCgVFQCYkbozmocIWNIXiIqgmD1uPQUhTqBYQIWE60MOo'
    $Image &= 'B3RGIvxsFS1hviVEGoTsgT3B/rD/+P/CbMHp0qw3WzSEPSRQKvkxrayHvmq3IOSodJ0IXBUs1w3h3TBE+FUsBPSEFG87sGFAz8g6EYqWCclv1BKOC2wKmJH1Ui4IydPkdqvIs2lwbbaEMg8W0BQ2jRcP4fSeFG9aJE0BM7JoCIN7mu6Jtjd+0J0xQPjdVhhIXYMQW5aUpUsyFVaiM3YCoXUMLiE+2WNxY1S2AaGMciDCJo3wp1AIP1ZZXslqW5e2bBqf7X6E1hGtGB6vqaTLB7MpuEZgpFszsiEM7iZAQhj1MLBpzX+HoEwFNAWN8LdYCAmX0kqpZrfNvqmWColgv2JQsXcTW0BoK9LQdRrBtixxRDIjgs82lKul8YIh/OPuTpvaNsI4gFdkmnd9xwxJ7/uG0MFN3ze8cEp65BLuyrgxinNP6so9PFOPUz1SY4cUA3VDKA5HTnp/xu6za/FY8lq2ZMKY/HOAe2Z/s/vsIckuvtHb529qLZUxEkLGTpViZbcQMK8HhgO9VC6hsTJGGg42OHo5TvIyk9nc7iCoo7V/gwgj0RDSzOgLwQXIPR4ESrMn0Jaxa0Y+mY6CUC6Vi7Hys0j+iGuweKfZ4WndgFFh7Hx9PrBm3D89cz0CQrk/BMrjQ6i8QQOflkadp0xEGD7BEaxeo7NyH8NhVxCSr0f9ZPShF46fuX7N6jlVcMuUFGNR11VMz+94/Aj5JoKmeCZOU32kISKcjYCQBMiUmzmZqwJAuhwe4pIGYO8Sgo8gPEPHjs9GQzDKIgwFbphu2Z8ky5Sa0atOSeaU5MJvjVaElOu6eV8mM4aR2lGEwCShttn33IWICEWepA0AWRQIhIFdbsYFcEs8HldJIkAyz2PP5XUT8G/MtRDkHPwrfSBQTdC6zwr0euS5m79EQsgiggkAblkRAxw/guQSAh4CwkD1tAM3bLvasnBIoZadZTuD0PHzpmmmoAclj89HQ7ARAVs2WlQEG+lDQC4kIARc'
    $Image &= 'eJtg25A9yhvAHJhrGjgA5ul8jPQ4O4Scsk3XYiBkAMDJuekwhIyomsil+xCQpIrdQ24qTgOIlk9WAagT9IPwGrWZekT4R+HPLMRAKOti+ILJOiMYcENQSC4fQhKHvveX5sDM82TJoD+EwqvRPwL44GIEhKIDkBQKvDeYgiHdCcGWNTLlcXkIGYkwV2omhS74+5zoEC7P0aN9IHz8eugEqfyb5yIh2E0E2R0MHMY+BLaN4AKYZRmPS1REMCQC7clNHBk5OSswkKlmo60wP6PQFKkFDQJjhLZZF5ciIFgCgZLOAmRaEVyAk2UMzgo5WisJLqTxEKpUJxhWDRts/N4GLywuwsdYEzqHJkuC0S5HRrAo2GijFUEHYNsLCbtMEVwSgQsB2IRwGoCVHLDF96l0enJSd7NgxETIH3o1ZCSo/87IhUgIcwIhqVsyui0bTXGgyqsEc0SfLlNk8wlhrkS5AWbJxmJByYER86A2X6RHAns9Yzt2MwaCC1VbBJqzBSULULXFDJjB8ZBMeQMCuXiH2EYoU0wAfQ6rRgYn02TSZTkAI+aZHSJQ85RnasHxMLQ/DoJVhWaqc5Y/ow5gTLdYzHEFH1fZQyjP2W6ZwrAXzDkAgItIwPSBUH5NdSFSC6mWBz65svTrj70j1N1T+GXcldGtYMq6adtZV1RNG8xiC1eZEPxJiZVTmtlA6R+BHAKdoU1h3/HfOEKl53SfRFvDJ5JRV8YbFqdcxebbBNxwipEgwrJ9IHxGCFT+FccI9DdfmL4VDSFSer1WkZ5j/hOokh0fYfnV9jMkehXkkUeMt3cVgRIuk4FUXIQVjqApTxNUd3dqeNj89GAilNKluAgfv+K1ure7e7V9z52Yf5wIEbCCJ7NRESivhD8SqAXehWvoheH+EPoPIUSPGqb0CjWSmt5xN4kl4eAeRlDD5N9RNJhUAjyiJJydX3p/9xHUEP0HLYvv9LhloGvS555AhNBTpOCkceCF4zMCodBzfu8v'
    $Image &= 'u4TgU6BCqMzI/ukT5wlhF1Lh2SWEwGqp07VZbd/X02cuPnEI1jvRrj49N31m9olDKLyjKAS0Vgzg4A1LBy/1j5CxWpNZ1a1uOckMHnYqDCFpxEP4uPByhINWbWT/8ZmzlxGhET+FwkkwrZasgpMOFUgatL3O6UGE5EnXddPifO4UvjRZxHVCufySj4D2jKoM8ZIwc+5CTISMka7IMFj1nTgwIxQh4wDYcxlmGDZi5NItCEnvSMHBv+eKI/y5iD2hKBHCmq75nnaYPhEbYRVONhFykIuwksgBZPXtYZFzoKpTF3GAIhFy8RD8V6I19XsOyVUCfwAqLkIdnEozq2D0jvAhmL6SMW6DM06HtqKTuC4zPQQ7OkLpXfV1N/U5M6+LZ85fuBMLwYVspZlqACHJwhRkMaTgGZw0cIA6SdHFw9fYCOF3brWOhn38AaiD56/eWUrHQDC2W14HYEQgUNwuI4LVLUoGAGGS3MBhLVVSZ0VCiJQ2BE1x2YVKwszBixyhfm05YrAkGC4zsqtZRHBJQKBkKhSdtXWMVZ+SC+KlyQ18A6VcLHIaiIGwRm3tdk8nPvVy4uzs1drC9WvL6166AyRF46EZu6K3IdDwkLc11f0GqGZRsgC88YwMKHERhqilIQdLmobPPwmEm7WNxa/GPitsbvaEkFmF7di2wdIVtyMCQwHHdK0wBAZgygsZzOqIYEXK3QOdHn7S2kYD1sVzl67Ulmr3JiYSk5WeEHK4xLFzWLbqBUxDgZAVX5Er61bakmxBQCdHdgTb6oAQeUd+9/kezxI0LAl8crh8pXZ/8cHDQ6NTiaPFR5ubj1qiQkhVmc6bbgDUC4RQZ4aRIYRV/GoC6ijiegi6UQU0kBWB7TSCpnUkoJLAEQ6ev4AIG7XrhxKJqcRovrDeEnVJFPEjmPLyq+tDwI6Q7oygMzmwsqJicA19xxDWEKHrPTqafCQSJweOsLS4uLBxaiyxlZia2jpqrW9udkdghJCR5cHG'
    $Image &= 'Ud2K0LxPp65CYIYUcJrrgjqVz0Ds6AjWjy8+1UM0+YQwr4sXL9ziPWFxsXbv8EQisbW1NZUYLzW6I7gAdeoUTkp0CQcYsjgA2PLG9m1N7QhSwMT1QleE1cgIPzxPB+sUxeHKCD4rTgiLD/44lMBgd0gcLS9vbkZAYIUGRpcKdhMBe4MpGPAlRXYd46RF6YyQi4Gw8rxscrflwhB/5zXcOcx6CKIsbPEktrjD1ugRa12MikeBNGTSAHprefAGiZOWCNgzBIS8rcmHYABkBAvlTweAUFrDqiwyQuGt0JvWvE6CJQHr4rnZq7c5AmZhcetwAiMceHUYz1dotiCEZqpgNGRy4DSIhhFCE6KO9+kEEJoGhGACGFZ/IQSLEDpqaHKVgHURERY4AuaBKAsSgQer5AdHLO6w3poGNT3N95JJ/M6mrSUYOH0SQnP6MLohMPCtoOp6xjBXT+4cgnqCPPb18DR/G8JLV+c9BCwLowkKVkkxLpZpviCEtANVLPEo0VAh1PUmgr4KwEIRMGJlldHrdddluebUUX8cCNQf5FssnTh7/jIhyLJAPWELk0CHj45YDQ6x2YqwzABjSgEql8wrEr77dAqtUSHg+tIfk1mxwg1WOIKm2EXSFNGsi+LdVDjCTUJYXFg4PRZAwFcIkfgobzUe0ajgxUFnRkYPHjI4HKXupvDskQ4SjYIvjBBaFXIObUpymbQlo1fNyA4rb3R6PJxOnTVREhQISw+WJg4rEDwI3iVKnEKmsdyeotugpF0ZveBPo5JyK8q4zDCY66brFgW7TVSEwuvK7k9FUfNKgkDgC8YWBL6J+GtsVI0ghgaXQIoCNliF0PBnWZ2/Kw11VDB192TsnhB+8+IQRziOM2QQYbEm1kzqeFUiIToD/hZMOAJZRUCwKtGDCFqngog/WpZKfHKYDSJsLPwylujQEzyE0eUBR1h+Xd0PEIFGg3wTQpwhgwiLNVwzhSN8JEvjenvIog+E/hOsCeoPyxsR'
    $Image &= 'dfHE2XYEWjOFIVAGG0G9cyKE44hw/tKFW0EEccISinB0c9ARXlN3BIpGb8QoEO4EETZwQxmSqcnHhVDYqRCC4llZevc9gYALxlt3NgjBWzP9ciikJ+w5BHVGxOQww2dIJcLSwmJq7IlCoNv46PHoZl3EZYIK4T4Wx8OdEY4QgjrLlAHtCThBYl2UCDdvqxCwOI4nME8YAl2IRIRhvmgOQaBt9Z5EeKX7k5BYF0VPOD+rRqBttRJhsn+EnU83BC04HPDt/LEn8Bny5rwCgaYIJcKHg47QIARFaL04jDOkQKgpEfDM8fMxNcL4HuoJ6gUDTQ7hCLh+nji8xxCoJ6gFKPhu/hLhIm4d1AhSYWxCgbA1ikdtA43wTufW0wzZEwJNlAGERIMQ9mBN0DRRF3HnIBAuhyNs4ETZjjBl7ZGeoJooqSRIhHPhCDRRBhHKKysroQi7GkVhbEOgQ2eN6iLfPslVcwgCTZRBhOQeQiAHH8I+OUPyI5VZvnVQI5DCxpeH2hAmCaFjHu1QoiHQcAiP2DngRx+FIVBqiydxueBDGN9TCHS0Sq+bH/ozczAUgfJgKTHmRxBz5OAi8BcvdZoVCGH//ubkwLcOXRFo0UQIicLeQVBfnMcTlUgI3ukCIUwVaTiEZpAQCIJmSLFW6o5ACjzbCJ/tUQSaHHAPGQEBU/trbKIVYXzQEPxZJoS2CknLhKgIuICeIIStxPqA1YRwBC14tHQAEabFgjECwgYqEMKURT0hSnYL4V2FAL3EuniMv4l9BATaRkzQHSyf7UEEWjbKyQHPlaIhkIJAGF1f6ZJNVQjjsSI8ejf8ItyQPGCMjkAKYkw0BhOBeoJ6fdAnAikgwlR+oBHuhh+q4OeFihnyzNloCKQgED5ciRPC6DnxEIaeCgkuE8SCceZEdASaI8QkGSO7hnAgrCOIGTIGAimMyeqIK+f4GRSE6MOB+gIifDjQCM+HPxXLlwkxagKl2Re2Est7BUF9MfY5D+Gy'
    $Image &= 'QFiIhIAKuLOeyg8Ggtrl+U5TpKbR5+wjwnkPYTESAl6OOIzHS7uAEHdZSgjKY0Y8V8KeIBAuxULAp2RQoTHACKF3eEsEcZzgIdyJhEDnC1Of7S0EjW5WGRE9IS4C9YWJMdo/DDCC+hPA+CayPwQ6d5yyBhZhmRCo+RptHY61DYdaNARSGN2Mm91DIAXKUHA4XImOQA8LWXukJ1An0AhhehvhKiJsREMghbHBROChe/0V1XFITpH9IJDCX4d++GFl8LLJo0Sg4bBzCBt3Hl77Z8dyLSQ/tuUH36v2f4EQFO+fcKAN4fZ8NIQNzEJtoVarPZh/eP0ndf5ozcM/HirzF/7oOfe+uXfvr3viyzcy33777TM8//47PDz8opcXxI/n1dee6MA9JgJvOoa3HXMHM3/zKs8Fnv/+u8Qze3F2dvbiRf7r/P+MnQGH41AUhfe1ml8Q2oj+oVpIIKCMUc22rckPid2FqYVhYQGy7U/cc9896U3mbZ4cu8uu6ST3yznnvljM6YS//31rr1g/f37oJ/Gh99sVn4H4CXyN6VuvN68Wv9r22l6v/g/qdvV/xzc4v9aH7l7kydphzsXiS1SGwiEOgFDNh8D5x9N/h95vuJ0WIgfMJATquj4dj8fDIeu6x2O1uld30Wq1eqjKsssOh0MNTJ7ZEwWHh2R4GfU59C0QrgwO59OhXFV5niTL5WazMEX+30Xfn7ZJ8QnCz98RCDK/9/6Hl59ebkyfqHoATx/Ty+wYPutKTH+vqiLP82a73LjnkX29TXY5rg4k+3358vKSCY/DERJ4EKFc6AgiUQkN/vbswb02CHEGths0DiGEHwEEcwAN8Jwf94Ab8ADEzydxfl3r+J1/+Pd7laaFzO9vbZzGzVpuAMe1IhUWgAEaxGE8vE28zpfL5dubEcGFeXmh/6oQGjrBIMS1kWNz4d8iM4Vwm4DgAUBM//v7uz4Czk/zQxy/LDm/PP9km6zXIwDOQJBEs8vzIgULpVGK'
    $Image &= 'ACOg4fU6qA/fQUCA6x+z8l4R92YmAm4HQjjWAYSgAxQA9ARg6ZfnrwTo/woAmoYOCAAElpBkJklDFCBhLABDBBSqGsZA1b6eGRd/B0B07B731CBM9sFYC3PC4Vi/Xr4FEH73Fvh4ErgRAD3YN4DmXxywogMEgFjAhTkMhY7YoKJAAtqNUOwhgQEUbI1aUKgnUKfSqbW/he5RCYQlIMwygrNOKEYQ7LQEBGxBlgAAGAG1AK/uCXQagQoVsNupBdiDJqfV7CYcsZCAKgl0ZiEkDEUpYkIgNcVT8hRQCQUhBAziEHIPAWYDhFZ3pKWAPWhrwBOQEPozwIDAQ0MACwBAogQWbtKFvINQTrNBS3hPVCQhKAZlwYRQhxACGcRlEPYlIXBH/mYPWBESQB+C88gDrEHugaQhgegPq4wwcQQhNYFW2QEFPDFgsTcWQ2klNKyEOQycdsIQgn+XBgQlAOlB6NevX4JAexAItAgJv/NFOEzBdskYRH+sdzi/G1WGQzSQDbUEVgdET1hTCAYD8VLuvREaXD7CILjkYr3WdweDcIMVVHoWBIDBeYRnoVEK4IH+LJT0MVhMpoC3MJjWTaVjoRxkg25pCdREQMKEOMqBZBYEMud28E5YEcKbUPj4IALIe6B/JTj3u6AWBDwN+CLwCBorgphc7PwWBgcgxBGIBjsiL0aNSRiQGoFZnBeGMQQpRpxBcB6TWuhjcKUHBMFFEZBA1kFC4DOCjXP/fU2ZoOCmGblRRWgy2Jbal+aJXlXOSog9ifCQ8nQCKNSkgET0OWghEBAE3AZ8Her3IRAIgcAFsTokGRfNa7gzDIRZgnVJSSZ7BrMhWDGu9qBwJAUkArpCvQmAgDEQAhlzIFelCeIIeC6IzGk1NZ0d14NYSkeoIywbotQaYV4kiddDIAXZuidQaNsbxByAAIJw6qvAXGA5kAtbG0YuH4mEiy0Ri+/CGsI6QqIhJOR2Yk/D+HM3WCdsBackq3z2ApYERAQ8'
    $Image &= 'l3sXZBBMgJUo3NUG20SvO2PeSPjjlJwzDhD9QEM0IFEICGtFN+sRkL4/pcpbfQoIe+uFFjYwBPZugK1cmgtGG8HFjgIkD83rAMhFChQc2BA8YnNn5NuJUowyVgpgCQrjXmAXAIHlICuhPbqALrA6XNj2HY7m4j+/OIiCC9GM69T+UTAIh/WzKhtolg+oCAV5RZNegPwbqrkgEwKCgH242wGBJ28julj7UbG4Tn4qBMl+YDCUxDaZlYVpCoVSyDJQgBeCIBABGKRiAzkff10u1xuzgXkh2InBc4/cmQv8MG0nZ0cpwfA1eGudA8EZBdkRwNC3I0QErMP9EAEYbJUBCbBxg0jPTueclRZAGC0MgOD9RBRNhJRjnqbWjlwJx0yEOuwRFBCSIAjWYoOpFiSXWCjcFJA5GhaOrAvkAlJXurlrOqSQ7Aprx/pzF7APFYEmAdiNwVTNzVjYBiSqyLZwujejJ5X493KegqyaHBQEw4sUg0gQWBmkqTDwCKZs4ILxXSwi9lUxP5BVXE5A/PfDVHwrsRf8caEABukFmAHK/nV2BqlyA0EM5SWQM3gzF/pklf3c/xqZsqdHGCFET2URTH87bUVSqdqLr5YgJYwZ/B3myRBJLr+uwFByUmQQMHv0yjtRse0LKxsNAksJP5cSrqYQLK1KwGGSMBJExd1LdTm4LwwX/okFFw1WMniMBw8EbKaB/F6E53D/O13BJiCQufCKHfoY9Jxzq4XBxw9PN/gtQ/Si/6qlkpzt/lZ8xYXg4MexpqlRxPMpGrwx+HlDEDDYEztFwkXlBtbejZgr3s78JYmB4C6F1+mv0QA5/Fabd6By0U9LtYPy0y2haqY8UVBPGEdchwaZBumYxN9Sfl+3a+NYmKnQNbuKsAi6UJgIrXFR2cAwqOWNIO/AemlFyKjgaWW7OI4ZRS4yKCS/htTVGH8J9iZAbwMQjENI2VqKP7RwRY9NWsAUMUPloDAJceLRFg1IsIi+duKaXQKq'
    $Image &= '2MwRwjZKcr/V8TEGzYuPiYiiQYtDRHvKIoDmnejF+uO76RJkJjKc6XFqaHCblioH3Kl69XM1py727C5IOj+EwnFy4azHwqBP6r2r95X9/9q+iqFrkMYm8fgz9baDNS5BOwZpWQazxJB/qAbmusMfT2BrH0mOSxKvP3LEDwnpIABu/tj8nNt7n6vA/i1CA+2sEcJYbrposOwAkt50VUuouH2ypRlK7DJX2pn00MmjOmO4YT80CQQHRmTtZmdXxm7ja0XchTbGYF3BLNw0Xk4CSFMyNl0nELY/7RKBtDLxDQwnDUrOt6vyNmWkqbfFltmcSeN5/uSDd9FjHaJlQCm4kHbUal9ppUHmyJjv4URhIMC/LmHM7FxpsqGq1Fegok93hP0X2A8u+PR+vyYdBVAeXls0CYb7Mp43tLhzRty3ZK//LbDOSsL+KC5bGNfdcHd5/4f27+4Z6T8Zv3ETjnu8lgAAAABJRU5ErkJggg=='
    Local $bString = _WinAPI_Base64Decode($Image)
    If @error Then Return SetError(1, 0, 0)
    $bString = Binary($bString)
    If $bSaveBinary Then
        Local Const $hFile = FileOpen($sSavePath & "\Using-Note.png", 18)
        If @error Then Return SetError(2, 0, $bString)
        FileWrite($hFile, $bString)
        FileClose($hFile)
    EndIf
    Return $bString
EndFunc   ;==>_Image

Func _WinAPI_Base64Decode($sB64String)
    Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($bBuffer, 1)
EndFunc   ;==>_WinAPI_Base64Decode

 


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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
10 hours ago, UEZ said:

Try this:

Wow, what can I say but THANK YOU :thumbsup:.  It works perfectly.  I was trying to accomplish something like this a couple years ago, posed the question, and you responded with a script that I tried to disassemble and merge with the background image script. I finally gave up. Had to move on.

@UEZ, have the functions you used in your code here, and their abilities, been bundled into a published UDF?

Also, please see this comment/"bug report?" I added to your File to Base64 String Code Generator thread.

Edited by timmy2

Share this post


Link to post
Share on other sites
3 hours ago, timmy2 said:

@UEZ, have the functions you used in your code here, and their abilities, been bundled into a published UDF?

No, and I never thought about this idea to do. Maybe or maybe not... ;)


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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Chimp
      If you set within a window, a given color as transparent, every area of that window painted with that color, act as an hole through wich you can see what's behind, and click on what's behind as well.
      What's funny is that if you embed a browser control within that window, the "transparent" color works even within the browser! This allow some interesting effects by simply opening any of the many javascript animations, or css effects or whatever within a browser control embedded into a GUI:
      Here, for example, is a simple effect of fishes swimming around on the screen.
      For lazyness I have embedded an ready made swf flash by a link to the web, but is of course possible embed any web page with javascripts css or whatever.....
      Have fun
      #include <WinAPI.au3> #include <WindowsConstants.au3> #include <Misc.au3> ; for _IsPressed (23 END key) Local $hDLL = DllOpen("user32.dll"), $oIE = ObjCreate("Shell.Explorer.2") Local $hBackground = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUPWINDOW, $WS_EX_LAYERED + $WS_EX_TOPMOST) Local $AlphaKey = 0xF0F7FF ; everything with color $AlphaKey within this window will be transparent ; even if within an embedded browser control!..... _WinAPI_SetLayeredWindowAttributes($hBackground, $AlphaKey, 0, $LWA_COLORKEY) GUISetState(@SW_SHOW, $hBackground) $hIE = GUICtrlCreateObj($oIE, 0, 0, @DesktopWidth, @DesktopHeight) ; <- embedd $oIE in the AutoIt GUI GUISetBkColor($AlphaKey, $hBackground) ; $AlphaKey $hBackground transparent $oIE.navigate('http://cdn.abowman.com/widgets/fish/fish.swf') ; $oIE.navigate('http://cdn.abowman.com/widgets/spider/spider.swf') ; a spider goes around on the screen .... ; !! to use the spider.swf, you need to set $AlphaKey = 0xffffff on line 7 "! While True If _IsPressed("23", $hDLL) Then ExitLoop ; END key was pressed Sleep(250) WEnd $oIE = "" $hDLL = "" GUIDelete($hBackground)  
    • By timmy2
      The following demo script, drawn largely from examples by @UEZ, lets me display colored text over a transparent background using my choice of font, type size, etc.  It is a single function (out of many) in the project I'm scripting, but it is crucial to my goal of displaying messages in an interesting way (IMHO).  
      (For the purpose of this forum post it displays a single string variable; my actual project script reads a number of  possible messages from a text file into an array and then chooses the messages to be displayed based on stuff that happens in the course of someone using my program.)
      Note that I am seeking help only to overcome my inability to figure out how to display this text atop a PNG graphic, and make the result a draggable object.
       
      #cs Display a message one character at a time with the goal of adding a PNG graphic overlay #ce ;~ #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <GUIConstants.au3> Global $sMessage Global $iString = 0 Global $aInfo Global Const $SC_DRAGMOVE = 0xF012 HotKeySet("{Esc}","Close") ; in my actual script I read in a file containing all the text to be displayed Global $sText = _ "Lorem ipsum dolor sit amet, consectetur" & @CRLF & _ "elit, sed do eiusmod tempor incididunt ut" & @CRLF & _ @CRLF & _ "Et dolore magna aliqua. Ut enim ad minim," & @CRLF & _ "quis nostrud exercitation ullamco laboris nisi" & @CRLF & _ "aliquip ex ea commodo consequat." & @CRLF & _ @CRLF & _ "Duis aute irure dolor in reprehenderit in" & @CRLF & _ "voluptate velit esse cillum dolore eu fugiat" & @CRLF & _ "nulla pariatur." & @CRLF ; Create GUI Global $hGUI = GUICreate("", 450, 340, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) GUISetBkColor(0xFF000000) ; will change background color, which UEZ doesn't use in his example, but then he doesn't want a BG GUISetState(@SW_SHOW) ; Draw a string _GDIPlus_Startup() Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF99ff33) Global $hFormat = _GDIPlus_StringFormatCreate() Global $hFamily = _GDIPlus_FontFamilyCreate("VT323") Global $hFont = _GDIPlus_FontCreate($hFamily, 14, 0) Global $tLayout = _GDIPlus_RectFCreate(20, 20, 0, 0) Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) Global $hBitmap = _GDIPlus_BitmapCreateFromScan0(420, 300) Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetTextRenderingHint($hBuffer, 4) _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 4) GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN") For $iString = 1 to StringLen($sText) $sMessage = StringLeft($sText,$iString) $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sMessage, $hFont, $tLayout, $hFormat) _GDIPlus_GraphicsClear($hBuffer, 0x000000) _GDIPlus_GraphicsDrawStringEx($hBuffer, $sMessage, $hFont, $aInfo[0], $hFormat, $hBrush) $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _WinAPI_BitmapDisplayTransparentInGUI($hHBitmap, $hGUI) _WinAPI_DeleteObject($hHBitmap) Next Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Close() ; Clean up resources (my best guess at what needs closing/shutting down) Func Close() _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_ImageDispose($hBitmap) _GDIPlus_Shutdown() Exit EndFunc ;==>Close Func _WinAPI_BitmapDisplayTransparentInGUI(ByRef $hHBitmap, ByRef $hGUI, $iOpacity = 0xFF, $bReleaseGDI = True) If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0) Local $tDim = DllStructCreate($tagBITMAP) If Not _WinAPI_GetObject($hHBitmap, DllStructGetSize($tDim), DllStructGetPtr($tDim)) Then Return SetError(2, 0, 0) Local $tSize = DllStructCreate($tagSIZE), $tSource = DllStructCreate($tagPOINT), $tBlend = DllStructCreate($tagBLENDFUNCTION) Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap) $tSize.X = $tDim.bmWidth $tSize.Y = $tDim.bmHeight $tBlend.Alpha = $iOpacity $tBlend.Format = 1 _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteDC($hMemDC) If $bReleaseGDI Then _WinAPI_DeleteObject($hHBitmap) Return True EndFunc Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) Switch $hWnd Case $hGUI _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) EndSwitch EndFunc ;==>_WM_LBUTTONDOWN  
      The above script lets me push the text out to the screen, but I want to display the text atop a PNG graphic, which is an imagined piece of hand-held test equipment that I'll refer to here as the Veeblefetzer.
      Here's a half-size animated gif of the desired result.

       
      Note that initially I used a different script to stream the text out atop a built-in black background rectangle.  I figured I would place the Veeblefetzer graphic above the text -- with the center "display area" of the Veeblefetzer cut out (transparent).  
      Then UEZ's example script came along. The benefit of using text that has a transparent BG, and placing it in a layer above the Veeblefetzer, is this lets me include reflections in the Veeblefetzer's display.
      Now to the challenges I'm ill-equipped to figure out.  
      The function I use to display the Veeblefetzer is below. It, too, is drawn from some of examples by @UEZ.
      There are actually two functions below, one I use to display the PNG graphic, and one that can be used to fade the graphic in or out.  I include it here only because it might be applicable to my ancillary goal of needing to clear the text on the handheld display before streaming the next message onto the Veeblefetzer's display.  I realize that the fade in/out function is for graphic objects, so it may not be applicable to text. 
       
      ; Display the image at center unless otherwise specified. If Fader will not be used then $iAlpha's default of 0xFF is good. ; If Fader will be used then start with $iAlpha equal to zero. Option to make this image "Always on top" is also available. Func DisplayImage($sFile, $iPosX = -1, $iPosY = -1, $iAlpha = 0xFF, $bTopmost = True) Local Const $hBmp_Background = _GDIPlus_BitmapCreateFromFile($sFile) ;load the image If @error Then Return SetError(1, 0, 0) ;image cannot be loaded Local Const $iW = _GDIPlus_ImageGetWidth($hBmp_Background), $iH = _GDIPlus_ImageGetHeight($hBmp_Background) ;get the dimension of the background image Local Const $hGUI = GUICreate("", $iW, $iH, $iPosX, $iPosY, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST * $bTopmost, $WS_EX_TOOLWINDOW)) ;create GUI with appropriate styles and extented style (borderless transparent GUI) GUICtrlCreateLabel("", 0, 0, $iW, $iH, Default, $GUI_WS_EX_PARENTDRAG) ;create a hidden label for GUI dragging GUISetState(@SW_SHOW, $hGUI) ;show GUI Local Const $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) ;define an empty bitmap where all the gfx stuff will copied to Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;get the context to the bitmap to be able to copy / draw to the bitmap _GDIPlus_GraphicsDrawImageRect($hGfx, $hBmp_Background, 0, 0, $iW, $iH) ;draw background image to the empty bitmap ;display GDI+ with transparency on desktop Local Const $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) ;convert GDI+ image to GDI to display it on the screen using GDI functions Local Const $hScrDC = _WinAPI_GetDC($hGUI) ;get the device context (dc) handle of the GUI Local Const $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC) ;create a compatible dc handle Local Const $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap) ;selects the GDI bitmap object into the specified device context Local Const $tSize = DllStructCreate($tagSIZE) ;create a $tagSIZE struct (x = width, y = height) DllStructSetData($tSize, "X", $iW) ;set data for width DllStructSetData($tSize, "Y", $iH) ;set data for height Local $tSource = DllStructCreate($tagPOINT) ;create a $tagPOINT struct (x = x position, y = y position) Local $tBlend = DllStructCreate($tagBLENDFUNCTION) ;create $tagBLENDFUNCTION struct -> see help file for more info DllStructSetData($tBlend, "Alpha", $iAlpha) ;set the alpha channel of the GUI -> 255 = opaque, 0 = transparent DllStructSetData($tBlend, "Format", 1) ;set the format to 1 -> bitmap has alpha channels DllCall("user32.dll", "bool", "UpdateLayeredWindow", "hwnd", $hGUI, "handle", $hScrDC, "ptr", 0, "struct*", $tSize, "handle", $hMemDC, "struct*", $tSource, "dword", 0, "struct*", $tBlend, "dword", $ULW_ALPHA) ;display bitmap on screen ;release resources otherwise memory will filled up (memory leak) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_BitmapDispose($hBitmap) Local $aResource[7] = [$hGUI, _ ;GUI handle $hScrDC, _ ;device context (dc) handle of the GUI (GDI) $hHBitmap, _ ;GDI bitmap handle of the displayed image $hMemDC, _ ;compatible dc handle from $hScrDC $tBlend, _ ;tBlend struct (source blend oper., flags, alpha value, format) -> see help file for description $tSize, _ ;tSize struct (width and height of the window / image) $tSource] ;tSource struct for x / y position of the GUI Return $aResource ;returns the handles to release it later or to use it for fading effects EndFunc ;==>DisplayImage ; This function releases the resources of a specific image and closes it Func ReleaseResources(ByRef $aResource) If Not IsArray($aResource) Then Return SetError(1, 0, 0) If UBound($aResource) <> 7 Then Return SetError(2, 0, 0) _WinAPI_ReleaseDC($aResource[0], $aResource[1]) _WinAPI_DeleteDC($aResource[3]) _WinAPI_DeleteObject($aResource[2]) GUIDelete($aResource[0]) EndFunc ;==>ReleaseResources ; To fade in an image leave $bIn at default (True); to fade out specify False. ; There are also options to set the ending transparency level (0 transparent, 255 opaque), speed and delay. ; If you change the speed or delay be sure to specify $bIn and $iTrans, otherwise you'll wonder why the fade-in or out isn't what you hoped for. ; The default values are specified in the function below. Func _Fader($res1, $bIn = True, $iTrans = 255, $speed = 3, $delay = 10 ) If Not IsArray($res1) Then Return SetError(1, 0, 0) If UBound($res1) <> 7 Then Return SetError(2, 0, 0) Switch $bIn Case True For $a = 0 To $iTrans Step $speed DllStructSetData($res1[4], "Alpha", $a) DllCall("user32.dll", "bool", "UpdateLayeredWindow", "hwnd", $res1[0], "handle", $res1[1], "ptr", 0, "struct*", $res1[5], "handle", $res1[3], "struct*", $res1[6], "dword", 0, "struct*", $res1[4], "dword", $ULW_ALPHA) ;display bitmap on screen Sleep($delay) Next Case Else For $a = $iTrans To 0 Step -$speed DllStructSetData($res1[4], "Alpha", $a) DllCall("user32.dll", "bool", "UpdateLayeredWindow", "hwnd", $res1[0], "handle", $res1[1], "ptr", 0, "struct*", $res1[5], "handle", $res1[3], "struct*", $res1[6], "dword", 0, "struct*", $res1[4], "dword", $ULW_ALPHA) ;display bitmap on screen Sleep($delay) Next EndSwitch EndFunc ;==>_FadeIn  
      Is anyone willing to step in and show me how to use the text display function along with the PNG display function, so that the resulting Veeblefetzer will be a single draggable object on screen?
      I'm equally baffled about how to properly clear off one message before displaying the next.
      The reason?   I have only the most rudimentary grasp of the commands within -- or the relationships between -- what seem like three distinct sections common to each of UEZ's scripts:
      Initialization (which defines a number of attributes, some of which are obvious to me, for text in this case)
      _GDIPlus_Startup() Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF99ff33) Global $hFormat = _GDIPlus_StringFormatCreate() Global $hFamily = _GDIPlus_FontFamilyCreate("VT323") Global $hFont = _GDIPlus_FontCreate($hFamily, 14, 0) Global $tLayout = _GDIPlus_RectFCreate(20, 20, 0, 0) Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) Global $hBitmap = _GDIPlus_BitmapCreateFromScan0(420, 300) Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetTextRenderingHint($hBuffer, 4) _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 4)  
      Delivery... (apparently what's needed to display the text)
      $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sMessage, $hFont, $tLayout, $hFormat) _GDIPlus_GraphicsClear($hBuffer, 0x000000) _GDIPlus_GraphicsDrawStringEx($hBuffer, $sMessage, $hFont, $aInfo[0], $hFormat, $hBrush) $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _WinAPI_BitmapDisplayTransparentInGUI($hHBitmap, $hGUI) _WinAPI_DeleteObject($hHBitmap) Even at my primitive level of understanding I have figured out that you can reuse the above "delivery" section to display other strings before proceeding to the next section.
       
      Cleanup... (apparently needed to release resources, which to me is like closing a previously opened file: it's part of the process so I'll do it):
      _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_ImageDispose($hBitmap) _GDIPlus_Shutdown()  
      (You're getting an inside look at a monkey brain at work here!)
      UEZ's script to display the PNG graphic follows a similar pattern. What I cannot figure out is how to merge the two scripts, while avoiding redundancy and conflicts. To clear the text between messages must I release any resources, and if so: which ones? AND, how do I group the PNG graphic with the text so the resulting "object" can be moved around on the screen?
       
       
    • By PINTO1927
      Hi guys, I would like to make a gui borderless viewing a png image with transparent background.
       
      pretty much has to be visible only the png image with no background..you have any simple example?
      Thank's
      GUICtrlCreatePic  
      still it provides the image with the background...
    • By wakillon
      Convert SVG file to PNG using Cairo and rsvg libraries (and their imports)
      #Region ;************ Includes ************ #include <File.au3> #EndRegion ;************ Includes ************ ; typedef enum _cairo_status Global Const $CAIRO_STATUS_SUCCESS = 0 Global Const $CAIRO_STATUS_NO_MEMORY = 1 Global Const $CAIRO_STATUS_INVALID_RESTORE = 2 Global Const $CAIRO_STATUS_INVALID_POP_GROUP = 3 Global Const $CAIRO_STATUS_NO_CURRENT_POINT = 4 Global Const $CAIRO_STATUS_INVALID_MATRIX = 5 Global Const $CAIRO_STATUS_INVALID_STATUS = 6 Global Const $CAIRO_STATUS_NULL_POINTER = 7 Global Const $CAIRO_STATUS_INVALID_STRING = 8 Global Const $CAIRO_STATUS_INVALID_PATH_DATA = 9 Global Const $CAIRO_STATUS_READ_ERROR = 10 Global Const $CAIRO_STATUS_WRITE_ERROR = 11 Global Const $CAIRO_STATUS_SURFACE_FINISHED = 12 Global Const $CAIRO_STATUS_SURFACE_TYPE_MISMATCH = 13 Global Const $CAIRO_STATUS_PATTERN_TYPE_MISMATCH = 14 Global Const $CAIRO_STATUS_INVALID_CONTENT = 15 Global Const $CAIRO_STATUS_INVALID_FORMAT = 16 Global Const $CAIRO_STATUS_INVALID_VISUAL = 17 Global Const $CAIRO_STATUS_FILE_NOT_FOUND = 18 Global Const $CAIRO_STATUS_INVALID_DASH = 19 Global Const $CAIRO_STATUS_INVALID_DSC_COMMENT = 20 Global Const $CAIRO_STATUS_INVALID_INDEX = 21 Global Const $CAIRO_STATUS_CLIP_NOT_REPRESENTABLE = 22 Global Const $CAIRO_STATUS_TEMP_FILE_ERROR = 23 Global Const $CAIRO_STATUS_INVALID_STRIDE = 24 Global Const $CAIRO_STATUS_FONT_TYPE_MISMATCH = 25 Global Const $CAIRO_STATUS_USER_FONT_IMMUTABLE = 26 Global Const $CAIRO_STATUS_USER_FONT_ERROR = 27 Global Const $CAIRO_STATUS_NEGATIVE_COUNT = 28 Global Const $CAIRO_STATUS_INVALID_CLUSTERS = 29 Global Const $CAIRO_STATUS_INVALID_SLANT = 30 Global Const $CAIRO_STATUS_INVALID_WEIGHT = 31 Global Const $CAIRO_STATUS_INVALID_SIZE = 32 Global Const $CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED = 33 Global Const $CAIRO_STATUS_DEVICE_TYPE_MISMATCH = 34 Global Const $CAIRO_STATUS_DEVICE_ERROR = 35 Global Const $CAIRO_STATUS_INVALID_MESH_CONSTRUCTION = 36 Global Const $CAIRO_STATUS_DEVICE_FINISHED = 37 Global Const $CAIRO_STATUS_LAST_STATUS = 38 ; typedef enum _cairo_format Global Const $CAIRO_FORMAT_INVALID = -1 Global Const $CAIRO_FORMAT_ARGB32 = 0 Global Const $CAIRO_FORMAT_RGB24 = 1 Global Const $CAIRO_FORMAT_A8 = 2 Global Const $CAIRO_FORMAT_A1 = 3 Global Const $CAIRO_FORMAT_RGB16_565 = 4 Global Const $CAIRO_FORMAT_RGB30 = 5 ; Check libraries. $aList = _FileListToArray ( @ScriptDir, '*.dll', 1, 0 ) For $i = 1 To UBound ( $aList ) -1 If _GetBinaryType ( @ScriptDir & '\' & $aList[$i] ) <> 'i386' Then Exit MsgBox ( 262144+16, 'Error', $aList[$i] & ' is not 32bit !', 5 ) ;~ ConsoleWrite ( $aList[$i] & @TAB & 'Version ' & FileGetVersion ( $aList[$i] ) & @Crlf ) Next #Region ------ Global Variables ------------------------------ FileChangeDir ( @ScriptDir & '\Libraries' ) Global $h_RsvgDll = DllOpen ( @ScriptDir & '\Libraries\librsvg-2-2.dll' ) Global $h_CairoDll = DllOpen ( @ScriptDir & '\Libraries\libcairo-2.dll' ) Global $sPngFilePath = @DesktopDir & '\' & @HOUR & @MIN & @SEC & @MSEC & '.png' Global $sSvgFilePath, $hRsvg, $pCairoSurface, $pCr #EndRegion --- Global Variables ------------------------------ FileChangeDir ( @ScriptDir & '\SVG files' ) $sSvgFilePath = FileOpenDialog ( 'Select a Shape', @WorkingDir, 'Vector Graphic (*.svg)', 1+2, '' ) If @error Then Exit ; Open the SVG image file $hRsvg = _Rsvg_handle_new_from_file ( $sSvgFilePath ) ConsoleWrite ( '!->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $hRsvg : ' & $hRsvg & @Crlf ) ; Get dimensions $aSize = _Rsvg_handle_get_dimensions ( $hRsvg ) If Not @error Then ConsoleWrite ( '> Width : ' & $aSize[0] & ', Height : ' & $aSize[1] & @Crlf ) ; Create a Surface into which we render the SVG drawing $pCairoSurface = _Cairo_image_surface_create ( $CAIRO_FORMAT_ARGB32, $aSize[0], $aSize[1] ) ConsoleWrite ( '!->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $pCairoSurface : ' & $pCairoSurface & @Crlf ) ; Create a new Cairo renderer $pCr = _Cairo_create ( $pCairoSurface ) ConsoleWrite ( '!->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $pCr : ' & $pCr & @Crlf ) ConsoleWrite ( 'Cairo status after _Cairo_create : ' & _Cairo_status ( $pCr ) & @Crlf ) ; Render the SVG into the Cairo buffer _Rsvg_handle_render_cairo ( $hRsvg, $pCr ) ConsoleWrite ( 'Cairo status after _Rsvg_handle_render_cairo : ' & _Cairo_status ( $pCr ) & @Crlf ) ; Save to png _Cairo_surface_write_to_png ( $pCairoSurface, $sPngFilePath ) ConsoleWrite ( 'Cairo status after _Cairo_surface_write_to_png : ' & _Cairo_status ( $pCr ) & @Crlf ) _Cairo_surface_finish ( $pCairoSurface ) ConsoleWrite ( 'Cairo status after _Cairo_surface_finish : ' & _Cairo_status ( $pCr ) & @Crlf ) _Rsvg_handle_close ( $hRsvg ) ConsoleWrite ( 'Cairo status after _Rsvg_handle_close : ' & _Cairo_status ( $pCr ) & @Crlf ) ; Display _BitmapDisplayInWindowsViewer ( $sPngFilePath ) ; Cleanup _Cairo_destroy ( $pCr ) _Cairo_surface_destroy ( $pCairoSurface ) DllClose ( $h_RsvgDll ) DllClose ( $h_CairoDll ) Exit Func _BitmapDisplayInWindowsViewer ( $sFilePath ) If Not FileExists ( $sFilePath ) Then Return SetError ( -1 ) Run ( 'rundll32 shimgvw.dll,ImageView_Fullscreen ' & $sFilePath ) EndFunc ;==> _BitmapDisplayInWindowsViewer() Func _Cairo_create ( $pCairoSurface ) Local $aRet = DllCall ( $h_CairoDll, 'ptr:cdecl', 'cairo_create', 'ptr', $pCairoSurface ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _Cairo_create() Func _Cairo_destroy ( $pCr ) Local $aRet = DllCall ( $h_CairoDll, 'int:cdecl', 'cairo_destroy', 'ptr', $pCr ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _Cairo_destroy() Func _Cairo_image_surface_create ( $iFormat, $iWidth, $iHeight ) Local $aRet = DllCall ( $h_CairoDll, 'ptr:cdecl', 'cairo_image_surface_create', 'int', $iFormat, 'int', $iWidth, 'int', $iHeight ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _Cairo_image_surface_create() Func _Cairo_image_surface_create_for_data ( $iFormat, $iWidth, $iHeight, $iStride ) Local $tStruct = DllStructCreate ( 'byte[' & $iStride*$iHeight & ']' ) Local $aRet = DllCall ( $h_CairoDll, 'ptr:cdecl', 'cairo_image_surface_create_for_data', 'ptr', DllStructGetPtr ( $tStruct ), 'int', $iFormat, 'int', $iWidth, 'int', $iHeight, 'int', $iStride ) If @error Then Return SetError ( @error, 0, 0 ) $tStruct = 0 Return $aRet[0] EndFunc ;==> _Cairo_image_surface_create_for_data() Func _Cairo_status ( $pCr ) Local $aRet = DllCall ( $h_CairoDll, 'int:cdecl', 'cairo_status', 'ptr', $pCr ) If @error Then Return SetError ( @error, 0, 0 ) Switch $aRet[0] Case $CAIRO_STATUS_SUCCESS Return 'SUCCESS' Case $CAIRO_STATUS_NO_MEMORY Return 'NO MEMORY' Case $CAIRO_STATUS_INVALID_RESTORE Return 'INVALID RESTORE' Case $CAIRO_STATUS_INVALID_POP_GROUP Return 'INVALID POP GROUP' Case $CAIRO_STATUS_NO_CURRENT_POINT Return 'NO CURRENT POINT' Case $CAIRO_STATUS_INVALID_MATRIX Return 'INVALID MATRIX' Case $CAIRO_STATUS_INVALID_STATUS Return 'INVALID STATUS' Case $CAIRO_STATUS_NULL_POINTER Return 'NULL POINTER' Case $CAIRO_STATUS_INVALID_STRING Return 'INVALID STRING' Case $CAIRO_STATUS_INVALID_PATH_DATA Return 'INVALID PATH DATA' Case $CAIRO_STATUS_READ_ERROR Return 'READ ERROR' Case $CAIRO_STATUS_WRITE_ERROR Return 'WRITE ERROR' Case $CAIRO_STATUS_SURFACE_FINISHED Return 'SURFACE FINISHED' Case $CAIRO_STATUS_SURFACE_TYPE_MISMATCH Return 'SURFACE TYPE MISMATCH' Case $CAIRO_STATUS_PATTERN_TYPE_MISMATCH Return 'PATTERN TYPE MISMATCH' Case $CAIRO_STATUS_INVALID_CONTENT Return 'INVALID CONTENT' Case $CAIRO_STATUS_INVALID_FORMAT Return 'INVALID FORMAT' Case $CAIRO_STATUS_INVALID_VISUAL Return 'INVALID VISUAL' Case $CAIRO_STATUS_FILE_NOT_FOUND Return 'FILE NOT FOUND' Case $CAIRO_STATUS_INVALID_DASH Return 'INVALID DASH' Case $CAIRO_STATUS_INVALID_DSC_COMMENT Return 'INVALID DSC COMMENT' Case $CAIRO_STATUS_INVALID_INDEX Return 'INVALID INDEX' Case $CAIRO_STATUS_CLIP_NOT_REPRESENTABLE Return 'CLIP NOT REPRESENTABLE' Case $CAIRO_STATUS_TEMP_FILE_ERROR Return 'TEMP FILE ERROR' Case $CAIRO_STATUS_INVALID_STRIDE Return 'INVALID STRIDE' Case $CAIRO_STATUS_FONT_TYPE_MISMATCH Return 'FONT TYPE MISMATCH' Case $CAIRO_STATUS_USER_FONT_IMMUTABLE Return 'USER FONT IMMUTABLE' Case $CAIRO_STATUS_USER_FONT_ERROR Return 'USER FONT ERROR' Case $CAIRO_STATUS_NEGATIVE_COUNT Return 'NEGATIVE COUNT' Case $CAIRO_STATUS_INVALID_CLUSTERS Return 'INVALID CLUSTERS' Case $CAIRO_STATUS_INVALID_SLANT Return 'INVALID SLANT' Case $CAIRO_STATUS_INVALID_WEIGHT Return 'INVALID WEIGHT' Case $CAIRO_STATUS_INVALID_SIZE Return 'INVALID SIZE' Case $CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED Return 'USER FONT NOT IMPLEMENTED' Case $CAIRO_STATUS_DEVICE_TYPE_MISMATCH Return 'DEVICE TYPE MISMATCH' Case $CAIRO_STATUS_DEVICE_ERROR Return 'DEVICE ERROR' Case $CAIRO_STATUS_INVALID_MESH_CONSTRUCTION Return 'INVALID MESH CONSTRUCTION' Case $CAIRO_STATUS_DEVICE_FINISHED Return 'DEVICE FINISHED' Case $CAIRO_STATUS_LAST_STATUS Return 'LAST STATUS' Case Else Return 'UNKNOW ERROR' EndSwitch EndFunc ;==> _Cairo_status() Func _Cairo_status_to_string() Local $aRet = DllCall ( $h_CairoDll, 'str:cdecl', 'cairo_status_to_string' ) If @error Then Return SetError ( @error, 0, 0 ) ;~ If $aRet[0] = '<unknown error status>' Then Return '' Return $aRet[0] EndFunc ;==> _Cairo_status_to_string() Func _Cairo_surface_destroy ( $pCairoSurface ) Local $aRet = DllCall ( $h_CairoDll, 'int:cdecl', 'cairo_surface_destroy', 'ptr', $pCairoSurface ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _Cairo_surface_destroy() Func _Cairo_surface_finish ( $pCairoSurface ) Local $aRet = DllCall ( $h_CairoDll, 'int:cdecl', 'cairo_surface_finish', 'ptr', $pCairoSurface ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _Cairo_surface_finish() Func _Cairo_surface_write_to_png ( $pCairoSurface, $sFilePath ) Local $aRet = DllCall ( $h_CairoDll, 'int:cdecl', 'cairo_surface_write_to_png', 'ptr', $pCairoSurface, 'str', $sFilePath ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _Cairo_surface_write_to_png() Func _GetBinaryType ( $sFilePath ) ; by Dougiefresh Local $hFile = FileOpen ( $sFilePath, 16 ) If $hFile = -1 Then Return SetError ( -1, 0, 'Invalid' ) If BinaryToString ( FileRead ( $hFile, 2 ) ) = 'MZ' Then FileSetPos ( $hFile, 60, 0 ) FileSetPos ( $hFile, Int ( FileRead ( $hFile, 4 ) ) +4, 0 ) Local $sFileRead = FileRead ( $hFile, 2 ) FileClose ( $hFile ) If $sFileRead = '0x6486' Then Return 'AMD64' If $sFileRead = '0x4c01' Then Return 'i386' If $sFileRead = '0x0002' Then Return 'IA64' EndIf FileClose ( $hFile ) Return 'Unknown' EndFunc ;==> _GetBinaryType() Func _Rsvg_handle_close ( $hRsvg ) Local $iError = 0 Local $aRet = DllCall ( $h_RsvgDll, 'ptr:cdecl', 'rsvg_handle_close', 'ptr', $hRsvg, 'int', $iError ) If @error Then Return SetError ( @error, 0, 0 ) If $iError Then Return SetError ( $iError, 0, 0 ) Return $aRet[0] EndFunc ;==> _Rsvg_handle_close() Func _Rsvg_handle_get_dimensions ( $hRsvg ) Local $aSize[4], $tRsvgDimensionData = DllStructCreate ( 'int width;int height;double em;double ex' ) Local $aRet = DllCall ( $h_RsvgDll, 'int:cdecl', 'rsvg_handle_get_dimensions', 'ptr', $hRsvg, 'ptr', DllStructGetPtr ( $tRsvgDimensionData ) ) If @error Then Return SetError ( @error, 0, 0 ) $aSize[0] = $tRsvgDimensionData.width $aSize[1] = $tRsvgDimensionData.height $aSize[2] = $tRsvgDimensionData.em $aSize[3] = $tRsvgDimensionData.ex $tRsvgDimensionData = 0 Return $aSize EndFunc ;==> _Rsvg_handle_get_dimensions() Func _Rsvg_handle_new_from_file ( $sSvgFile ) If Not FileExists ( $sSvgFile ) Then Return SetError ( -1, 0, 0 ) Local $iError = 0 Local $aRet = DllCall ( $h_RsvgDll, 'ptr:cdecl', 'rsvg_handle_new_from_file', 'str', FileGetShortName ( $sSvgFile ), 'int', $iError ) If @error Then Return SetError ( @error, 0, 0 ) If $iError Then Return SetError ( $iError, 0, 0 ) Return $aRet[0] EndFunc ;==> _Rsvg_handle_new_from_file() Func _Rsvg_handle_render_cairo ( $hRsvg, $pCr ) Local $aRet = DllCall ( $h_RsvgDll, 'bool:cdecl', 'rsvg_handle_render_cairo', 'ptr', $hRsvg, 'ptr', $pCr ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] ; Returns TRUE if drawing succeeded. EndFunc ;==> _Rsvg_handle_render_cairo() Func _Rsvg_init() ; deprecated since version 2.36 and should not be used in newly-written code. Local $aRet = DllCall ( $h_RsvgDll, 'int:cdecl', 'rsvg_init' ) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _Rsvg_init() Script and files are available in the downloads Section
       
    • By wakillon
      Convert SVG file to PNG using Cairo and rsvg libraries
×
×
  • Create New...