Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/07/2020 in all areas

  1. Hi guys, here is a small dll wrapper I made geared at making YOLOv3 (Joseph Redmon, Ali Farhadi) more accessible to AutoIt users. Homepage of YOLO: https://pjreddie.com/darknet/yolo/ Technical overview: You only look once (YOLO) is a state-of-the-art, real-time object detection system. On a Pascal Titan X it processes images at 30 FPS and has a mAP of 57.9% on COCO test-dev. (from https://pjreddie.com/darknet/yolo/) Screenshots: Features: This UDF currently supports recognizing objects in images passed in as a HBITMAP Below is a complete list of the functions currently available in this library: ; #CURRENT# ===================================================================================================================== ;_AutoYolo3_GetLastError ;_AutoYolo3_GetObjInHBitmap ;_AutoYolo3_GetVersion ;_AutoYolo3_SetConfig ;_AutoYolo3_YoloTest ; =============================================================================================================================== The _AutoYolo3_GetObjInHBitmap function returns a 2D Array of detected objects as illustrated below: Examples: Example1: basic_example.au3 #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <AutoYOLO3.au3> #include <GDIPlus.au3> ConsoleWrite("Using autoyolo version:" & _AutoYolo3_GetVersion() & @CRLF) _GDIPlus_Startup() $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir&"\people-2557408_1920.jpg") Local $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage, 0x00000000) Local $aRes = _AutoYolo3_GetObjInHBitmap($hHBITMAP) _ArrayDisplay($aRes) _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() Example 2: gui_example.au3 #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_AU3Check_Parameters=-w 1 -w 2 -w 3 -w 4 -w 5 #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <AutoYOLO3.au3> #include <GDIPlus.au3> ConsoleWrite("Using autoyolo version:" & _AutoYolo3_GetVersion() & @CRLF) _GUIExample1() Func _GUIExample1()     _GDIPlus_Startup()     Local $iPicW=609     Local $iPicH=385     #Region ### START Koda GUI section ### Form=     GUICreate(@ScriptName&" - Object Detection with AutoIt!", 625, 506)     GUISetFont(14, 400, 0, "Calibri")     Local $Button1 = GUICtrlCreateButton("browse", 472, 8, 145, 33)     Local $Input1 = GUICtrlCreateInput(@ScriptDir & "\scooter-5180947_1920.jpg", 8, 8, 457, 31)     Local $Button2 = GUICtrlCreateButton("detect objects!", 228, 448, 169, 49)     Local $Pic1 = GUICtrlCreatePic("", 8, 48, $iPicW, $iPicH, $SS_BITMAP)     GUISetState(@SW_SHOW)     #EndRegion ### END Koda GUI section ###     Local $hImage = _LoadImage($Input1, $Pic1, 0, $iPicW,$iPicH)     While 1         $nMsg = GUIGetMsg()         Switch $nMsg             Case $GUI_EVENT_CLOSE                 Exit             Case $Button1                 GUICtrlSetData($Input1, FileOpenDialog("Please select image", @ScriptDir, "All (*.*)"))                 $hImage = _LoadImage($Input1, $Pic1, $hImage, $iPicW,$iPicH)             Case $Button2                 GUICtrlSetState($Button2, $GUI_DISABLE)                 GUICtrlSetData($Button2, "working..")                 Local $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage, 0x00000000)                 Local $aRes = _AutoYolo3_GetObjInHBitmap($hHBITMAP)                 ;_ArrayDisplay($aRes)                 If @error Then                     Local $iErr = @error                     Local $asDllErrors[6] = ["No error", "unable to use the DLL file", "unknown ""return type""", """function"" not found in the DLL file", "bad number of parameters", "bad parameter"]                     If $iErr < 6 Then                         MsgBox(32, @ScriptName, "DLL Error, " & $asDllErrors[$iErr])                     Else                         MsgBox(32, @ScriptName, "DLL Error, " & _AutoYolo3_GetLastError())                     EndIf                 ElseIf _AutoYolo3_GetLastError() <> "" Then                     MsgBox(32, @ScriptName, _AutoYolo3_GetLastError())                 Else                     ;nice thick green boxes                     Local $hPen = _GDIPlus_PenCreate(0xFF00FF00, 2, 2)                     Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)                     Local $hFormat = _GDIPlus_StringFormatCreate()                     Local $hFamily = _GDIPlus_FontFamilyCreate("Calibri")                     Local $hFont = _GDIPlus_FontCreate($hFamily, 12, 0)                     Local $tLayout = _GDIPlus_RectFCreate(140, 110, 100, 20)                     Local $hBrushBack = _GDIPlus_BrushCreateSolid(0x7FFFFFFF) ;color format AARRGGBB (hex)                     $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)                     _GDIPlus_GraphicsSetSmoothingMode($hGraphics, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;sets the graphics object rendering quality (antialiasing)                     For $i = 1 To $aRes[0][0]                         ; Draw a frame around the object                         _GDIPlus_GraphicsDrawRect($hGraphics, $aRes[$i][2], $aRes[$i][3] , ($aRes[$i][4] - $aRes[$i][2]) , ($aRes[$i][5] - $aRes[$i][3]) , $hPen)                         ; Label it                         $sLabel = $aRes[$i][0] & " " & StringLeft($aRes[$i][1], 6)                         $tLayout = _GDIPlus_RectFCreate($aRes[$i][2] , $aRes[$i][3] , 200, 20)                         $iBackLen = 0                         If (StringLen($sLabel) * 8) > $iBackLen Then                             $iBackLen = StringLen($sLabel) * 8                         EndIf                         _GDIPlus_GraphicsFillRect($hGraphics, $aRes[$i][2] , $aRes[$i][3], $iBackLen, 20, $hBrushBack)                         _GDIPlus_GraphicsDrawStringEx($hGraphics, $sLabel, $hFont, $tLayout, $hFormat, $hBrush)                     Next                     $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage, 0x00000000)                     GUICtrlSendMsg($Pic1, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBITMAP)                     _GDIPlus_PenDispose($hPen)                     _GDIPlus_FontDispose($hFont)                     _GDIPlus_FontFamilyDispose($hFamily)                     _GDIPlus_StringFormatDispose($hFormat)                     _GDIPlus_BrushDispose($hBrush)                     _GDIPlus_BrushDispose($hBrushBack)                     _GDIPlus_GraphicsDispose($hGraphics)                 EndIf                 GUICtrlSetData($Button2, "detect objects!")                 GUICtrlSetState($Button2, $GUI_ENABLE)         EndSwitch     WEnd     If $hImage <> 0 Then         _GDIPlus_ImageDispose($hImage)     EndIf     _GDIPlus_Shutdown() EndFunc   ;==>_GUIExample1 Func _LoadImage($Input1, $Pic1, $hImage, $iPicW, $iPicH)     If $hImage <> 0 Then         _GDIPlus_ImageDispose($hImage)     EndIf     Local $sImagePath = GUICtrlRead($Input1)     $hImage = _GDIPlus_ImageLoadFromFile($sImagePath)     Local $iWidth = _GDIPlus_ImageGetWidth($hImage)     Local $iHeight = _GDIPlus_ImageGetHeight($hImage)     Local $sFactor = 1     If $iWidth > $iPicW Then         $sFactor = $iPicW / $iWidth     EndIf     If $iHeight > $iPicH And ($iHeight * $sFactor) > $iPicH Then         $sFactor = $iPicH / $iHeight     EndIf     $iHeight = $iHeight * $sFactor     $iWidth = $iWidth * $sFactor     $hResizedImage = _GDIPlus_ImageResize($hImage, $iWidth, $iHeight)     _GDIPlus_BitmapDispose($hImage)     Local $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hResizedImage, 0x00000000)     GUICtrlSendMsg($Pic1, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBITMAP)     Return $hResizedImage EndFunc   ;==>_LoadImage Requirements: Windows x64, AutoIt x64 Microsoft Visual C++ 2015-2019 Redistributable (x64) - https://aka.ms/vs/16/release/vc_redist.x64.exe OpenCV binaries - https://sourceforge.net/projects/opencvlibrary/files/4.3.0/opencv-4.3.0-vc14_vc15.exe/download Quickstart: Ensure you are running Windows x64, AutoIt x64 Install Microsoft Visual C++ 2015-2019 Redistributable (x64) if not already installed - https://aka.ms/vs/16/release/vc_redist.x64.exe Create your project directory anywhere, for this example we use C:\projectdir\ Download OpenCV - https://sourceforge.net/projects/opencvlibrary/files/4.3.0/opencv-4.3.0-vc14_vc15.exe/download Unpack OpenCV anywhere and copy opencv_videoio_ffmpeg430_64.dll, opencv_world430.dll to C:\projectdir\ Download trained weights, classes, config files Weights file: Save as C:\projectdir\yolo\yolov3.weights - https://pjreddie.com/media/files/yolov3.weights Classes file: Save as C:\projectdir\yolo\yolov3.txt - https://github.com/pjreddie/darknet/blob/master/data/coco.names https://raw.githubusercontent.com/zishor/yolo-python-rtsp/master/cfg/yolov3.txt NEW Config file: Save as C:\projectdir\yolo\yolov3.cfg - https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg https://raw.githubusercontent.com/zishor/yolo-python-rtsp/master/cfg/yolov3.cfg NEW Unpack autoyolo1.1.zip from downloads below to your project dir So your project directory should look like: C:\projectdir\ │   autoyolo.dll │   AutoYOLO3.au3 │   basic_example.au3 │   gui_example.au3 │   opencv_videoio_ffmpeg430_64.dll │   opencv_world430.dll │   people-2557408_1920.jpg │   scooter-5180947_1920.jpg │ └───yolo         yolov3.cfg         yolov3.txt         yolov3.weights You are done! Try running one of the examples! Download: LAST UPDATED: 06-JUN-2020 autoyolo1.1.zip 785 KB Credits: YOLOv3: An Incremental Improvement - Joseph Redmon, Ali Farhad https://pjreddie.com/yolo/ https://www.learnopencv.com/deep-learning-based-object-detection-using-yolov3-with-opencv-python-c/ zishor for alternative config and classes (https://github.com/zishor/yolo-python-rtsp) MIT License FAQ: I get error "Cannot use dll" Ensure that you are running script as x64, that you have Microsoft Visual C++ 2015-2019 Redistributable (x64) installed, and that the following files are in the @ScriptDir: autoyolo.dll, opencv_videoio_ffmpeg430_64.dll, opencv_world430.dll I get a crash when clicking detect Try using the NEW config and classes links above All feedback is welcome -smartee
    1 point
  2. water

    OutlookEX

    Version 1.7.0.1

    10,051 downloads

    Extensive library to control and manipulate Microsoft Outlook. This UDF holds the functions to automate items (folders, mails, contacts ...) in the background. Can be seen like an API. There are other UDFs available to automate Outlook: OutlookEX_GUI: This UDF holds the functions to automate the Outlook GUI. OutlookTools: Allows to import/export contacts and events to VCF/ICS files and much more. Threads: Development - General Help & Support - Example Scripts - Wiki BTW: If you like this UDF please click the "I like this" button. This tells me where to next put my development effort KNOWN BUGS (last changed: 2020-02-09) None
    1 point
  3. TheXman

    Enumerating Fonts

    I did a little quick research and found that there is a hidden file in the \Windows\Fonts folder named fms_metadata.xml. If you edit the file you will see that it lists font families. I don't know if it is a complete list, but it looks like it. Using a combination of the fms_metadata.xml to get a list of font families and the EnumFontFamilies function to get a list of all of the font styles, it wouldn't be too hard to generate a list that looks like the information on the ChooseFont dialog. I also read that Windows 10 adds another layer of complexity because unlike previous versions of Windows, fonts downloaded & installed from the Windows Store are kept in a different location than \Windows\Fonts. But that is a different issue altogether.
    1 point
  4. From here -- So drop the use of the handle if you want to use the text parameter.
    1 point
  5. Something like this: ;To get selected text ;ControlSend('[ACTIVE]', '', '', '^{INS}') $sText = 'Dkflbvbh' ;ClipGet() _CorrectKeyBoardLayout($sText, True) MsgBox(64, @ScriptName, $sText, 0, Default) _CorrectKeyBoardLayout($sText, False) MsgBox(64, @ScriptName, $sText, 0, Default) Func _CorrectKeyBoardLayout(ByRef $sText, $bToCyrilic) Local $sLatin_Table = 'QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>qwertyuiop[]asdfghjkl;''zxcvbnm,.' Local $sCyrilic_Table = 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю' Local $aText = StringSplit($sText, '') Local $iPos If Not $bToCyrilic Then Local $sTmp = $sCyrilic_Table $sCyrilic_Table = $sLatin_Table $sLatin_Table = $sTmp EndIf $sText = '' For $i = 1 To $aText[0] $iPos = StringInStr($sLatin_Table, $aText[$i], 1) If $iPos Then $sText &= StringMid($sCyrilic_Table, $iPos, 1) Else $sText &= $aText[$i] EndIf Next EndFunc
    1 point
  6. Build a character translation table between your latin keyboard and the cyrillic keyboard layout you should have used. See https://en.wikipedia.org/wiki/Keyboard_layout#Cyrillic Copy this table by pivoting to perform the reverse translation. Select the word/phrase typed with the wrong layout, copy it to clipboard, get the Unicode text content and perform the translation according to the character map latin -> cyrillic or reverse. Then put the result on the clipboard and paste it on place over the old selection. Make that an executable launched at startup with hotkeys to trigger the operation.
    1 point
  7. ..so I click click the script in explorer and nothing, error, so I'm like, whaaaa ! If StringInStr(@AutoItExe, "\autoit3.exe") Then Exit ShellExecute( StringReplace(@AutoItExe, "\autoit3.exe", "\autoit3_x64.exe"), '"' & @ScriptFullPath & '"') Add that to the examples in the next release, it'll save us from a scare
    1 point
  8. ..so I run opencv_version.exe and got these errors: The program can't start because MFPlat.DLL is missing from your computer. Try reinstalling the program to fix this problem. The program can't start because MF.dll is missing from your computer. Try reinstalling the program to fix this problem. The program can't start because MFReadWrite.dll is missing from your computer. Try reinstalling the program to fix this problem. This error usually occurs when you are running on Windows N or Windows KN operating system, which does not include some media features required. To install the required media features, follow the link and select your particular Windows system to install the required files. Once you complete the installation, this error should no longer appear. Solution from: https://support.rockstargames.com/articles/204933118/How-to-Resolve-Dependency-MFREADWRITE-DLL-is-missing-Please-reinstall-the-game-errors-on-GTAV-for-PC
    1 point
  9. Good, download and extract/install https://sourceforge.net/projects/opencvlibrary/files/4.3.0/opencv-4.3.0-vc14_vc15.exe/download The DLLs will be in {your extracted path}\opencv\build\x64\vc15\bin\ Good luck!
    1 point
  10. TheXman

    Enumerating Fonts

    The answer to your question is in the question itself. The EnumFontFamiles Win32 API lists/enumerates fonts by their Families. Referring to your example, although they have the same base font name (Typeface), DejaVu Serif & DejaVu Serif Condensed are different families. The ChooseFont Win32 API lists all fonts without taking the family into account, Bold & italics are types within a given font family. Maybe the article below will help: https://docs.microsoft.com/en-us/windows/win32/gdi/enumerating-the-installed-fonts
    1 point
  11. @CYCho That seems appropriate to me. In fact, it might be good to make this an option built into _WD_Startup.
    1 point
  12. @KaFu Oops Sorry, my mistake. I only see that the code was posted by Melba. I didn't read the comments in code. My bad. I will edit my reply. Sorry for the mistake.
    1 point
  13. No, surprisingly not . Normally I always name the author(s) when mentioning sources, so that acknowledgements go to the right address. Since they are listed in the function headers, I assumed that would be sufficient. For reasons of politeness among programmers, here is the corresponding addendum : Author : @Ascend4nt , based on code by @KaFu , klaus.s
    1 point
  14. Here a basic example how a rotation of a transparent needle can be done. #include <GDIPlus.au3> #include <GUIConstantsEx.au3> Global Const $iWidth = 300, $iHeight = 200 Global Const $hGUI = GUICreate("GDI+ Needle Rotation Example", $iWidth, $iHeight) GUISetState() _GDIPlus_Startup() ;create buffered graphic handle to display final drawn image Global Const $hCanvas = _GDIPlus_GraphicsCreateFromHWND($hGUI) Global Const $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hCanvas) Global Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) ;load needle from memory Global Const $hImage = _GDIPlus_BitmapCreateFromMemory(_Zeiger()) ;create a new image with squared dimension of the loaded needle bitmap and place the needle center in the middle Global Const $iNeedleCenterX = 25, $iNeedleCenterY = 8, $iImageWidth = 117, $iImageHeight = 17, $iNeedleWidth = 2 * ($iImageWidth - $iNeedleCenterX), $iNeedleHeight = $iNeedleWidth Global Const $hImage_Needle = _GDIPlus_BitmapCreateFromScan0($iNeedleWidth, $iNeedleHeight) Global Const $hCtxt = _GDIPlus_ImageGetGraphicsContext($hImage_Needle) _GDIPlus_GraphicsDrawImageRect($hCtxt, $hImage, $iNeedleWidth / 2 - $iNeedleCenterX, $iNeedleHeight / 2 - $iNeedleCenterY, $iImageWidth, $iImageHeight) Global Const $fRadius = $iImageWidth - $iNeedleCenterX, $fCenterScreenX = $iWidth / 2, $fCenterScreenY = $iHeight / 2 - 30 Global $fAngle = 0, $iDir = 1 Global Const $hBrush = _GDIPlus_LineBrushCreate(0, 0, $fRadius, $fRadius, 0xFFFF0000, 0xFF00FF00, 1) Do ;do some animation _GDIPlus_GraphicsClear($hGfx) RotateNeedle($fAngle) $fAngle += 0.5 * $iDir If BitOR($fAngle < 0, $fAngle > 180) Then $iDir *= -1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hCanvas) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_GraphicsDispose($hCtxt) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_BitmapDispose($hImage_Needle) _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() GUIDelete() Exit EndSwitch Until False Func RotateNeedle($fAngle) ;draw a dummy background Local Const $hPath = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath, $fCenterScreenX - $fRadius, $fCenterScreenY, 2 * $fRadius, 2 * $fRadius, 180, 180) _GDIPlus_GraphicsFillPath($hGfx, $hPath, $hBrush) _GDIPlus_PathDispose($hPath) ;create a new bitmap Local Const $hBmp = _GDIPlus_BitmapCreateFromScan0($iNeedleWidth, $iNeedleHeight) Local Const $hContext = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetPixelOffsetMode($hContext, 2) ;create a matrix handle to rotate bitmap Local Const $hMatrix = _GDIPlus_MatrixCreate() _GDIPlus_MatrixTranslate($hMatrix, $fRadius, $fRadius) _GDIPlus_MatrixRotate($hMatrix, -180 + $fAngle) _GDIPlus_GraphicsSetTransform($hContext, $hMatrix) _GDIPlus_MatrixTranslate($hMatrix, -$fRadius, -$fRadius) _GDIPlus_GraphicsSetTransform($hContext, $hMatrix) ;copy needle to the rotated bitmap _GDIPlus_GraphicsDrawImageRect($hContext, $hImage_Needle, 0, 0, $iNeedleWidth, $iNeedleHeight) ;copy result to our main graphic content _GDIPlus_GraphicsDrawImageRect($hGfx, $hBmp, $fCenterScreenX - $fRadius, $fCenterScreenY - 10, $iNeedleWidth, $iNeedleHeight) _GDIPlus_GraphicsDrawImageRect($hCanvas, $hBitmap, 0, 0, $iWidth, $iHeight) ;release resources within this function to avoid memory leak _GDIPlus_MatrixDispose($hMatrix) _GDIPlus_GraphicsDispose($hContext) _GDIPlus_ImageDispose($hBmp) EndFunc ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2015-09-19 Func _Zeiger($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Zeiger $Zeiger &= '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' $Zeiger &= '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' $Zeiger &= 's2/cjvufqDUuTAVRsM/LeN+QUCbqjVqNDSZVGauOx1yGQCDKNgcHh8jn80xNTfHSCy99pd6oHV6LuUsVt3P11DUnCoUCSimUUhw48DojIyM0m022b9/Gm2+++d5tu29HKYXWGq01SoHWXWMRAc9zY+MxGNPVQqW6QhQRjDForYgiy9at0zjHjhx9MMVEa3l5+feNRkPt2LmDkfIIp06e+vmr/3jl/T5mzwKq787655rxfEJLAE9CoPqtNObwYeA24NaLtuL13Ol6Fm0er4yJyIzWilwujzGaKLIMD5f45KPavcBf6o2a5TInddWXr5ZbbrmVcnkk1heDtRatFShFe2mJp59+Cs/LUK1O4LoOrVaLUmmIG264gcnJSZ599jm2bd+OjSIc10WsxYrgGMPCQvOQ1spqrcVaibRWLC0tHbDW4rhugCBKEZ08OXsQEXE9t621RqGC/c/vfyNlXAJ04nY5bm3cJn2AKL5EmxhYYmxq83hFisUimUxmlbInFIYhp07NUiwOsGnTJrQ2eJ7L9PQ0N+3ayfj4OD+474eUSqWeOqa9dPdMhVIgYrGWriBXVBdrLX0Bqd/Tr1qbnlNq9VzyLaV01zM4DoWCf/rM3Pw/1ToCmpo7c3qr7xffyuVy5HJZtmyZ5tprp5iZaTT3/m3vg8Cj9UYtuuzVeL0LR8tjdyvFHsdxfaWYFcuPxMpzwPJGhL//+49Wxqoqkug9YCqbzeJ5HgBaa0aGh1//4PiH99Qbtcbl/qNOHFkTAw9TRh4CiLLf10pNZTIZBgdLOI6D1orR0VGuuGLiplZz8RfAz9a61XNF32T+UqJzes/F7Fe337Zbdu26GRC0MSAgCCb2xE888RgA5fIopdIwy8sdwjDkmqlr2HLddSwuLtJqLeK6XjfKG0MURhjTdQrNZvNd4ziCEImIOI6RZrN1QIE4rhNGkcV13WBm5sQ7WunA9dwQsEabcN/efW+kvG0QC9/G/bTXTbcCSL1Rs2lBOLOzsxw5cqTPo61otEh3znU9RCxBEBJFIb7vM755HK0Ne554kkKh0APKItKDOcCWuO0KUxuAbf1rBwYGEEneC1aE73zvu4jtvjfGYG3U5U9rrLU4xiAiWCs4jsHa5LuKMIpwHYfh4WEq1cpxp9lc4OOPP+rZ3WqXvfLjnU4brbvuf2KiSrVSwfd9Xn7pZY4ff38VJuueIT1X352XHiP94aQ/dCShbnWo6p/rhhKRdIhSvdCT9D0vs5DNZtuORNx/6uQpp0+lE3ttt9vt3Zmsd9/i4hJhGDIxMcHk5CTFgSIKxZ7H9+zPZLKPrMNMlvpygbUoirHk+ZxkkMoZzvU+TDlbAeaceqP22wsY/x/nz859yRjna9ZGtDttgiAgWA544P4fP5PJZH9ab9Q+uty97gXzyhTdBbwGzMeAfF37L5dHbaTQxsc2l0XkGRHZncCwbv6ke0qUCM91nL8vLbYfAt4DFj4PScLnhTbkUitj1Ywl+odSamfXKWo8L0Mm48UYQ/e0yHVdCoUCAwNFisUBzsyfeeXtg2//Gnih3qgtfHElG3CpN+3cJeXyKFdeeSUDA8UVE44rG2EYHo6iaKEbvhGtjWitJAnXURTJvn17r56bmxtJYIHv+xQKBbLZLFoboigkDENc16VYLDI4OMjQ0BBDQ4MU/AIfHP/wPwffOvinbdu3/dvzvFAEDr176NiRw4fPprCPivtRX0EjSuGiZI1N7UsHzrXGkgpG0qfwcqlpy6WC3KR/vr39Z/ePnXq9TqfTzeZLpVIKwqi4XKWu7f55d49WehXMOXNmnrm5071xJpPB931830cpTRRFiAhRZLG2QzabJZ/PMTY+xuhomXwuz9jo2FWHDh36VRhGZLIaJcL01i1svX5rr2Qm0s3ku3yp2PqJsWQC5XQMuxLY1F2rlEYQFCrGmyulOGsFKxZFtyyXXK+Nz9BK9yoHK2uTc1WPr7QhJPHXWkt7qf2O1lqM0VZExFpBxKK1Fq2N' $Zeiger &= 'oECslVar9YZSOjLGiFKxdgkRCquVFqWUUlrZ2U9P/guwxJjXdV3J5/PRsaPH3jn41sEZoOVYa1lYWODkyVlarVbKIwsi6XZN6EGn08Ha7oKkNhlFlk5nOS6wRQRBiLUR2WyWoaFByqOjlEdGKJVKZLNZjh49Rq1WIwgCMpls75L6eblQ5TDRtRW+pQ8Vro44ibKkS0oJZk6vT8+dn4c07iZOPJzptRKndAkozjl2JLlCP3Zf+f7qUpLWGs/z8P0OW6an+fqdd1LwCzjAi512u3riRF0brXubU9qSstM13JeIstZWRCSvtSIIApaWFgnDoGcRAwMDbBrcxMjwMOVymXK5jF/08TwPYxwe+d0jzcVWa74xM9NUSkvaAaquMEMbycKaXHxWrAJEgtgLYQfV/UAvJT+Hi44USlL6taY0xEpTRM6Vw6TDxoVwTDocqL7UfK11yfkd4BTwsaNE3Q1kbGiVxa4XVEWp/F852smfbZ79g1K5e7ReRkRYXl7GGEM2m8E4Br9QIF8okM/ncV2HKLK89uprrcceffx5YL/ruH+NQnsa7EaU3ux5YulFZ0KpR13C3iQ2XzK6v9j4vFHoVwFq/uzc9cAvPS/z7Ww24xrjkMvlKI+WKY+MkMvl6HQ68u7bh/67sLDwotZ6P/AKUK83aiFf0IbQ/wAq4CpjdWoV/AAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Zeiger) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\tacho_zeiger_max.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Zeiger 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
    1 point
  15. eukalyptus

    Direct2D UDF

    Direct2D UDF Is Direct2D the new GDIPlus? Hmm - I think it is not! It is too complicated and Microsoft failed at the design But Direct2D is hardware accelerated and it has some features I always missed in GDIPlus, like loading/saving animated GIF´s, combining path´s or drawing bitmap´s in a perspective view... check out the examples to see, what can be done Download: https://autoit.de/index.php/Attachment/70-Direct2D-7z/ Or visit the original topic at the german forum - link in my signature
    1 point
×
×
  • Create New...