Guten Tag liebes Forum
Ich habe vor einigen Jahren (2013 *hust*) n thema erstellt, welches durchaus für einige interessant war. (falls dies thema verlinkt werden sollte, oder doch lieber der grabstein bleiben soll, wird sich wohl zeigen)
Nun ging dies etwas verloren und aus irgendwelchen gründen, kahm mir das thema wieder auf und habe mich promt 3std hingesetzt.
Nun, es wahren nur 3std, debbuging ist noch und optimierungen gibts wohl einige! ist auch schon einige zeit zurück mit autoIT
Das grundgerüst hätte ich soweit, jedoch, lief ich bei der letzten version, auf ein
"Error allocating memory"
gehe ich davon richtig aus, das dies an autoIT selbst liegt / limitiert ist was dass verwenden des zwischenspeichers angeht?
in diesem falle, wie könnt ich dies umgehen?
Ich danke auch für berichtigung, bei irrtümlichkeiten.
das script macht nichts anderes, als jedes einzelne pixel eines bildes als wert zurück gibt, habe dabei absichtlich die bitmap von GDI+ verwendet (dunkle umgehen ), auch keine direkte beschreibung der code lines!
Script
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.14.5
Author: Skilkor
Script Function:
scan & save color-grid of imported image
#ce ----------------------------------------------------------------------------
#Region ### #include ###
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <ProgressConstants.au3>
#include <GDIPlus.au3>
#EndRegion ### #include ###
#Region ### Global ###
Global $hGuiTitel = 'Image Scan'
Global $data
Global $Pic_ODia = FileOpenDialog('Pic', @ScriptDir & '\', 'Images (*.BMP;*.JPG)', 2)
#EndRegion ### Global ###
#Region ### hGui ###
$hGui = GUICreate($hGuiTitel, 720, 450, -1, -1)
$imp_b = GUICtrlCreateButton('import...', 10, 10, 50, 25)
$scan_b = GUICtrlCreateButton('Scan...', 10, 40, 50, 25)
$Pic_Show = GUICtrlCreatePic('', 80, 10, 380, 140)
$data_Field = GUICtrlCreateEdit('Startup: Init import' & @CRLF, 10, 160, 700, 210, BitOR($ES_WANTRETURN, $ES_MULTILINE, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_VSCROLL), -1)
_GUICtrlEdit_SetLimitText($data_Field, 0)
$Prog_Main = GUICtrlCreateProgress(10, 380, 700, 25, $PBS_SMOOTH)
$Prog_Sub = GUICtrlCreateProgress(10, 415, 700, 25, $PBS_SMOOTH)
GUISetState(@SW_SHOW)
#EndRegion ### hGui ###
_import()
#Region ### While 1 ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $imp_b
_import()
Case $scan_b
_scan_init()
EndSwitch
WEnd
#EndRegion ### While 1 ###
#Region ### Fun _import() ###
Func _import()
If @error Then
_Data_Field('ERROR: No file(s) were selected.')
Else
GUICtrlSetImage($Pic_Show, $Pic_ODia)
_Data_Field('Imported: ' & $Pic_ODia)
EndIf
Return
EndFunc ;==>_import
#EndRegion ### Fun _import() ###
#Region ### Scan_init ###
Func _scan_init()
_Data_Field('Scan: Startup')
_GDIPlus_Startup()
_Data_Field('Scan: GDI+ Startup')
$hImage = _GDIPlus_ImageLoadFromFile($Pic_ODia)
_Data_Field('Scan: GDI+ Load Image - ' & $hImage)
$width = _GDIPlus_ImageGetWidth($hImage) ;x
_Data_Field('Scan: GDI+ width = ' & $width)
$height = _GDIPlus_ImageGetHeight($hImage) ;y
_Data_Field('Scan: GDI+ height = ' & $height)
_scan($width, $height, $hImage)
EndFunc ;==>_scan_init
#EndRegion ### Scan_init ###
#Region ### Scan ###
Func _scan($x, $y, $hImage)
For $a = 0 To $y
GUICtrlSetData($Prog_Main, (100 / $y * $a))
For $i = 0 To $x
$PGC_w = _GDIPlus_BitmapGetPixel($hImage, $i, $a)
_Data_Field('Scan: @Grid: x: ' & $i & ' | y: ' & $a & ' | Pixel Color: ' & $PGC_w)
_save($PGC_w & ' - ')
GUICtrlSetData($Prog_Sub, (100 / $x * $i))
Next
Next
$size = $y & 'x' & $x
_GDIPlus_Shutdown()
_Data_Field('Scan: GDI+ Shutdown')
EndFunc ;==>_scan
#EndRegion ### Scan ###
#Region ### Func _Data_Field ###
Func _Data_Field($data)
GUICtrlSetData($data_Field, $data & @CRLF, 1)
EndFunc ;==>_Data_Field
#EndRegion ### Func _Data_Field ###
#Region ### save ###
Func _save($Tdata)
Local $sFile = @ScriptDir & '\Save.txt'
FileOpen($sFile, $FO_APPEND)
FileWrite($sFile,$Tdata)
FileClose($sFile)
EndFunc ;==>_save
#EndRegion ### save ###
Ich hoffe es ist doch nicht zu unübersichtlich, hab mitlerweillen wohl eine "komische" aufbau weisse oä
Greez