#include <_base64.au3>
#include <GDIPlus.au3>
#include <Memory.au3>
$baseStr = "iVBORw0KGgoAAAANSUhEUgAAACMAAAAMEAQAAAASuhByAAAAAmJLR0T//xSrMc0AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAGMSURBVDjLvZQ9a8JQFIZfBZUKOhUXf4KTKFro1g4OxcXiT/BHdOjUsaO/QLoIBQsGOliiYFtQcQm4+TEUxQ9EIQnGQTgdbi/mWwXpCyHhPu97zslNuMAJmkyI+n2iUzL/IknaD9Vq7Z8liWg0Ojxwr8c8u90ZXm65NBYZj8+6Yz4fIIrAvqii6BtEo4wZLzaUPXPLuQySSADNprsxl2OsWuUr3S73Wlmn48yc5OVlgUDA3ZpOs3u9zleSSY9Hzx6fs1nOUikj0+fsNBwSod0mAiqVnw/nLRwMiIBGg7HFAlDVO4EIiESYg7HLVyJAVQFBMDOeAwTh+4rI+AvYyu0z1WrAdArE40ChwHzlspk93PAa5fJ2S8TZ1y2RNceOC0urzeaon+tPwSDzrVZOLHxvV8eam88d+x07TCjEfLMZAMiyPmNkbjmzvIfaKgoR2zVRBDTtLUsE5POMlkoAEA7X64CmvbwTPV3Isp7xHJDJmHNcDmeU287EYqywogDrNVAsAn7/Mez6k8ieGfULhFc5Rz/ePiYAAAAASUVORK5CYII="
$str = _Base64Decode($baseStr)
;~ $str2 = StringToBinary ($str)
$priceValue = ''
$priceValue = _baseToMem($str)
MsgBox(0, 'Заголовок', $priceValue)
Func _baseToMem(ByRef $Binary)
Local $picdata = Binary($Binary) ; Fetch the Data
Local $piclength = BinaryLen($picdata) ; Get Length
Local $picstruct = DllStructCreate("byte[" & $piclength & "]")
DllStructSetData($picstruct,1,$picdata)
Local $picmemory = DllStructGetPtr($picstruct)
Local $priceValue = _memToBitmap($picmemory, $piclength)
DllStructSetData($picstruct,1,0)
$picstruct = ""
Return $priceValue
EndFunc
Func _memToBitmap($Pointer, $nSize)
$hData = _MemGlobalAlloc($Pointer,2)
$pData = _MemGlobalLock($hData)
_MemMoveMemory($Pointer,$pData,$nSize)
_MemGlobalUnlock($hData)
$pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
$pStream = $pStream[3]
_GDIPlus_Startup()
$pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
$pBitmap = $pBitmap[2]
$iBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap, 0xFFFFFFFF)
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($iBitmap)
$iWidth = _GDIPlus_ImageGetWidth($hBitmap)
$iHeight = _GDIPlus_ImageGetHeight($hBitmap)
; clone с преобразованием
$hBitmap = _GDIPlus_BitmapCloneArea ($hBitmap, 0, 0, $iWidth, $iHeight, $GDIP_PXF01INDEXED)
Local $priceValue = _Capcha_Rec($hBitmap, $iWidth)
_GDIPlus_BitmapDispose($pBitmap)
_GDIPlus_Shutdown()
_WinAPI_DeleteObject($pStream)
_MemGlobalFree($hData)
Return $priceValue
EndFunc
Func _Capcha_Rec(ByRef $hBitmap, $iWidth)
$iRes = ''
$f = 0
$icountSpace = Int($iWidth/7/4)
$icountDigit = ($iWidth/7) - $icountSpace
$i = $icountDigit;
While $f < ($iWidth - $icountSpace*4 - 6)
$tagGDIPBD = _GDIPlus_BitmapLockBits($hBitmap, $f, 3, 5, 9, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
$bData = DllStructGetData(DllStructCreate('byte[' & (5 * 9 * 4) & ']', DllStructGetData($tagGDIPBD, 'Scan0')), 1)
$bData = StringReplace($bData, '000000FF', 1)
$bData = StringReplace($bData, 'FFFFFFFF', 0)
;~ MsgBox (0,0, $bData)
_GDIPlus_BitmapUnlockBits($hBitmap, $tagGDIPBD)
Switch $bData
Case _
'0x011111100111001110011100111001110011100101111', _
'0x011111101111001110011100111001110011110101111', _
'0x011111110111001110011100111001110011100101111', _
'0x011111101111001110011100111001110011100101111', _
'0x011111100111001110011100111001110011101101111', _
'0x011111100111001110011100111001110011110101111', _
'0x011111111111001110011100111001110011100101111', _
'0x011111100111001110011100111001110011111101111', _
'0x011111101111001110011100111001110011101101111';0
$iRes &= 0
Case _
'0x000110011101111010110001100011000110001100011' ;1
$iRes &= 1
Case _
'0x011111100100001000110001100111011001100011111', _
'0x011111100100001000110001100110011001100011111', _
'0x011111100100001000010001100110011001100011111', _
'0x011111100100001000010001100111011001100011111' ;2
$iRes &= 2
Case _
'0x011111100100001001110000100001000011100101111', _
'0x011111100100001001110001100001000011100101111', _
'0x011111100100001001110000100001000011101101111', _
'0x011111100100001001110001100001000011101101111' ;3
$iRes &= 3
Case _
'0x000110011100111010110101110011111110001100011', _
'0x000110011100111011110101110011111110001100011' ;4
$iRes &= 4
Case _
'0x011110110011100111111100100001000011100101111', _
'0x011110110011100111111100100001000011101101111', _
'0x011110110011000111111100100001000011100101111', _
'0x011110110011000111111101100001000011100101111', _
'0x011110110011000111111100100001000011101101111', _
'0x011110110011100111111101100001000011100101111';5
$iRes &= 5
Case _
'0x001110100111000111111100111001110011100101111', _
'0x001110100111000111111100111001110011110101111', _
'0x001110100111000111111101111001110011100101111', _
'0x000110010001100011110110001100011000110000111', _
'0x011110100111000111111100111001110011100101111', _
'0x000110010001100011110110001100011000111000111', _
'0x001110110111000111111100111001110011110101111', _
'0x001110110111000111111100111001110011100101111', _
'0x000110011001100011110110001100011000110000111', _
'0x011110100111000111111100111001110011110101111', _
'0x001110010001100011110110001100011000110000111', _
'0x001110010001100011110110001100011000111000111', _
'0x000110010001100011110110101100011000110000111';6
$iRes &= 6
Case _
'0x111110000100011000110011000110011000110001100', _
'0x111110000100011001110011000110011000110001100' ;7
$iRes &= 7
Case _
'0x011111100111001110010111111001110011100101111' ;8
$iRes &= 8
Case _
'0x011111100111001110011100101111000011100101110', _
'0x011111101111001110011100101111000011100101110', _
'0x011111100111001110011100101111000011101101110', _
'0x011111100111001110011100101111000011100101111', _
'0x011111101111001110011100101111000011101101110', _
'0x011111101111001110011100101111000011100101111', _
'0x011111100111001110011100101111000011101101111';9
$iRes &= 9
Case Else
$iRes &= 'x'
MsgBox (0,0, $bData)
ClipPut($bData)
;~ ExitLoop
EndSwitch
$i -= 1
if Mod($i, 3) = 0 Then
$f += 10
Else
$f += 7
EndIf
WEnd
Return SetError(0, 0, $iRes)
EndFunc