Grafik speichern - nur schwarzes Bild oder gar kein Ergebnis

  • Hallo zusammen,

    ich schreibe an einem Programm zur Fraktalberechnung. (ich weiß davon gibts schon tausende ... ist auch eher zur Schulung und zum experimentieren). Die Berechnung klapp inzwischen ganz gut. Zum Setzen der einzelnen Pixel nutze ich die SetPixel-Funktion der user32.dll, das sie schneller ist als die GDI+ -Funktion (GraphicsFillRect). Ist die Berechnung des Fraktals abgeschlossen soll die erzeugte Grafik gespeichert werden. Dazu nutze ich wiederum GDI+, da ich in der user32.dll nix passendes gefunden habe. Ich wandle also meine Grafik in ein Bitmap um. Da die Größe der Grafik veränderlich ist, ist die letzte Funtion "BitmapCloneArea". Damit soll die Grafik ohne Rand ausgeschnitten werden um sie dann zu speichern. Und hier liegt mein Problem: entweder wird garnichts gespeichert oder nur der schwarze Hintergrund.

    Ich habe das Script auf die wesentlichen Befehlszeilen gekürzt. Der Rest läuft ja.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Fraktalberechnung
    ; Scriptauszug - nicht lauffähig

    [/autoit] [autoit][/autoit] [autoit]

    #include-once
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <ButtonConstants.au3>
    #include <GdiPlus.au3>
    #Include <Array.au3>
    #include <EditConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #include <_GUIBox.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    $hWBild = GUICreate("Fraktal",$vDisplayBreite,$vDisplayHoehe, -1, 0) ; erstellt das Grafikfesnter
    $dc = GetDC(WinGetHandle($hWBild)) ; ermittelt den Gerätekontext der Grafikfensters
    $hWDaten=GUICreate("Datenfenster",$vDisplayBreite,150,-1,@DesktopHeight-170,-1,-1,$hWBild) ;erstellt das datenfenster

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1 ; Warteschleife für die verschiedenen Funktionen vor und nach der Berechnung - eher uninteressant
    ;~ $nMsg=GUIGetMsg()
    $aMsg = GUIGetMsg(1)

    [/autoit] [autoit][/autoit] [autoit]

    If $aMsg[1]=$hWBild Then
    Switch $aMsg[0]
    Case $GUI_EVENT_PRIMARYDOWN ; Rechteck zeichnen
    $aMPos=MouseGetPos()
    while _IsPressed("01",$user32)
    ToolTip("Position: "&$aMPos[0]&"x"&$aMPos[1])
    _GDIPlus_GraphicsDrawRect($hGraphic, $aMPos[0], $aMPos[1],MouseGetPos(0)-$aMPos[0],MouseGetPos(1)-$aMPos[1],$hPinsel)
    WEnd
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $aMsg[1]=$hWDaten Then
    Switch $aMsg[0]
    Case $bStart ;46
    Start()
    Case $bAbbrechen
    Abbrechen()
    Case $bRatio1
    Verhaeltniss(1)
    Case $bRatio2
    Verhaeltniss(2)
    Case $bRatio3
    Verhaeltniss(3)
    EndSwitch
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Start()
    ; Berechnung des Fraktals bzw. Pixels und setzen des Pixels
    setPixel($dc,$vSpalte,$vZeile,Farbwert($vDurchlauf,$vmD)) ; user32.DLL Funktion

    [/autoit] [autoit][/autoit] [autoit]

    ; Am Ende der Berechnung
    Fraktal_speichern()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Fraktal_speichern()
    _GDIPlus_Startup() ;Gdi starten
    $hGraphic = _GDIPlus_GraphicsCreateFromHDC ($dc)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($vBreiteGrafik,$vHoeheGrafik,$hGraphic) ;Buffer ertsellen 1. Teil
    ;~ $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Buffer erstellen 2. Teil
    $hKopie = _GDIPlus_BitmapCloneArea($hBitmap,0,0,$vBreiteGrafik,$vHoeheGrafik)

    [/autoit] [autoit][/autoit] [autoit]

    DirCreate(@ScriptDir&"\Bilder")
    $vDateiName=@ScriptDir&"\Bilder\Test_1.jpg"

    [/autoit] [autoit][/autoit] [autoit]

    If _GDIPlus_ImageSaveToFile($hKopie,$vDateiName)Then
    MsgBox(0,"Speichern ....","Bild wurde erfolgreich gespeichert !!! ",3)
    Else
    MsgBox(0,"Error",@error)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func setpixel($dc, $x, $y, $color) ;pixel mit farbe an koordinaten setzen
    DllCall($gdi32, "long", "SetPixel", "long", $dc, "long", $x, "long", $y, "long", $color)
    EndFunc ;==>pix
    Func GetDC($handle)
    $dc = DllCall($user32, "int", "GetDC", "hwnd", $handle)
    Return $dc[0]
    EndFunc ;==>GetDC

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Wo hab ich meinen Fehler versteckt ?

    Vorab besten Dank...

    Wenn Du's eilig hast - geh langsam...

  • Ein nicht lauffähiges Skript ist nicht besonders hilfreich, aber hier einige Hinweise:

    _GDIPlus_GraphicsDrawRect($hGraphic, $aMPos[0], $aMPos[1],MouseGetPos(0)-$aMPos[0],MouseGetPos(1)-$aMPos[1],$hPinsel) schreibt direkt in den Graphic Handle und nicht in die Bitmap, somit bekommst du "nur" leere Bitmaps. D.h. du musst ein Graphic Context erstellen und deine Graphic Operationen in den Graphic Context schreiben, so dass diese in die Bitmap gewrappt wird.

    Um direkt in die Bitmap einen Pixel zu setzen, kannst du auch _GDIPlus_BitmapSetPixel() benutzen. Damit würdest du dir die Konvertierung zwischen GDI und GDI+ sparen.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Mein Script ist nicht besonders sauber - sind noch viele Baustellen drin. Aber es läuft.


    Hier also das Script:

    Spoiler anzeigen
    [autoit]


    #include-once
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <ButtonConstants.au3>
    #include <GdiPlus.au3>
    #Include <Array.au3>
    #include <EditConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #include <_GUIBox.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;------------------------------------------------------------
    Global $vXs,$vXe,$vYs,$vYe,$vSpalte,$vZeile,$vStarX,$vEndX,$vStarY,$vEndY,$vDurchlauf,$vMaxDurchlauf,$vBereichX,$vBereichY,$vmI,$vmD
    Global $vBreiteGrafik, $vHoeheGrafik, $vStartGrafikX, $vStartGrafikY, $vSteppX, $vSteppY
    Global $Ratio1, $Ratio2, $Ratio3, $aMPos[4],$vRatio
    Global $vDisplayBreite, $vDisplayHoehe

    [/autoit] [autoit][/autoit] [autoit]

    Global $nMsg,$hGraphic,$hPinsel,$vInteration,$aFarben[0],$vFarbanzahl,$vStop,$hBitmap,$hBuffer,$vStepp,$hKopie,$dc

    [/autoit] [autoit][/autoit] [autoit]

    $user32 = DllOpen("user32.dll")
    $gdi32 = DllOpen("gdi32.dll")

    [/autoit] [autoit][/autoit] [autoit]

    $vDisplayBreite=@DesktopWidth-20;
    $vDisplayHoehe=@DesktopHeight-20;
    $vStartGrafikX=10
    $vStartGrafikY=10

    [/autoit] [autoit][/autoit] [autoit]

    $hWBild = GUICreate("Fraktal",$vDisplayBreite,$vDisplayHoehe-20, -1, 0)
    $dc = GetDC(WinGetHandle($hWBild))
    $hWDaten=GUICreate("FFP - Datenfenster",$vDisplayBreite,150,-1,@DesktopHeight-170,-1,-1,$hWBild)

    [/autoit] [autoit][/autoit] [autoit]

    ; Eingabe der Eckdaten zur Berechnung
    GUICtrlCreateGroup("Werte für die X - und Y - Achse",5,4,236,113)
    GUICtrlCreateLabel("Startwert:",37,19)
    GUICtrlCreateLabel("Endwert:",140,19)
    GUICtrlCreateLabel("X:",12,39)
    $vStartX=GUICtrlCreateInput("-2.50", 28, 35, 100, 20)
    $vEndX=GUICtrlCreateInput("+1.00", 131, 35, 100, 20)
    GUICtrlCreateLabel("Y:",13,61)
    $vStartY=GUICtrlCreateInput("-1.40", 28, 58, 100, 20)
    $vEndY=GUICtrlCreateInput("+1.40", 131, 58, 100, 20)
    $lBreiteX_Achse=GUICtrlCreateLabel("Wert X-Achse: ",12,81,200,12)
    $lBreiteY_Achse=GUICtrlCreateLabel("Wert Y-Achse: ",12,97,200,12)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Eingabe der Eckdaten zur Berechnung
    GUICtrlCreateGroup("",250,4,180,62)
    GUICtrlCreateLabel("max. Durchläufe:",275,19)
    $vMaxDurchlauf=GUICtrlCreateInput("100", 360, 17, 60, 20)
    GUICtrlCreateLabel("Höchstwert Iteration:",259,41)
    $vMaxIteration=GUICtrlCreateInput("1000", 360, 39, 60, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    GUICtrlCreateGroup("Farbraster",250,70,180,39)
    GUICtrlCreateLabel("Faktor:",296,85)
    $vZoom=GUICtrlCreateInput("23", 360, 83, 60, 20)
    $updown = GUICtrlCreateUpdown($vZoom)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Gruppe Grafikgröße in Pixel
    GUICtrlCreateGroup("Grafikgröße - waagerecht x senkrecht",440,4,200,62)
    $vInputBeiteGrafik=GUICtrlCreateInput($vDisplayBreite, 470, 30, 60, 20) ;$vDisplayBreite
    $vBeiteGrafikTMP=GUICtrlCreateUpdown($vInputBeiteGrafik)
    GUICtrlCreateLabel("X",537,31)
    $vInputHoeheGrafik=GUICtrlCreateInput($vDisplayHoehe, 550, 30, 60, 20)
    $vHoeheGrafikTMP=GUICtrlCreateUpdown($vInputHoeheGrafik)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Gruppe Seitenverhältnis
    GUICtrlCreateGroup("Seitenverhältnis der Grafik",440,70,200,39)
    $bRatio1 = GUICtrlCreateRadio("4 : 3", 450, 85, 50, 20) ; = 0.75 oder 1.33333
    $bRatio2 = GUICtrlCreateRadio("16 : 9", 520, 85, 50, 20) ; = 0.5625 oder 1.777778
    $bRatio3 = GUICtrlCreateRadio("ohne", 590, 85, 45, 20)
    GUICtrlSetState($bRatio3, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; ----------------------------------------------------------------------------
    GUICtrlCreateGroup("Auswahl der Farbpalette",650,4,130,105)
    $bPalette1 = GUICtrlCreateRadio("Farbpalette 1", 670, 30, 100, 20)
    $bPalette2 = GUICtrlCreateRadio("Farbpalette 2", 670, 52, 100, 20)
    $bPalette3 = GUICtrlCreateRadio("Farbpalette 3", 670, 74, 100, 20)
    GUICtrlSetState($bPalette1, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Gruppe Prozessbar
    $vGruppeProzess=GUICtrlCreateGroup("Fortschritt",$vDisplayBreite-220,79,210,30)
    $vProgressbar = GUICtrlCreateProgress($vDisplayBreite-216, 92, 200, 10, $PBS_SMOOTH)
    GUICtrlSetColor(-1, 32250)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; ------------------------------ Fußzeile ---------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------
    $bFoto=GUICtrlCreateButton("Bild speichern",$vDisplayBreite-220,8,100,20)
    $bStart=GUICtrlCreateButton("Start",$vDisplayBreite-110,35,100,40,$BS_DEFPUSHBUTTON)
    $bAbbrechen=GUICtrlCreateButton("Beenden",$vDisplayBreite-220,35,100,40)
    GUISetState(@SW_SHOW,$hWBild)
    WinActivate("Fraktal")
    GUISetBkColor(0X000000)
    GUISetState(@SW_SHOW,$hWDaten)

    [/autoit] [autoit][/autoit] [autoit]

    GUISwitch($hWDaten)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    ;~ $nMsg=GUIGetMsg()
    $aMsg = GUIGetMsg(1)
    If $aMsg[1]=$hWBild Then
    Switch $aMsg[0]
    Case $GUI_EVENT_PRIMARYDOWN
    $aRubberGBox=_GBoxCreate("",2,0xFF0000)
    $aMPos[0]=MouseGetPos(0)
    $aMPos[1]=MouseGetPos(1)
    while _IsPressed("01",$user32)
    $aMPos[2]=MouseGetPos(0)
    $aMPos[3]=MouseGetPos(1)
    ;~ MsgBox(0,"$vRatio",$vRatio)
    ;~ $aMPos[3]=$aMPos[1]+($aMPos[2]-$aMPos[0])*0.75

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $vRatioTMP=($aMPos[2]-$aMPos[0])*$vRatio
    ;~ ToolTip("Position: "&$aMPos[0]&"x"&$aMPos[1]&" - - "&$aMPos[2]&"x"&$aMPos[3]&" R: "&$vRatio)
    _GBoxShowAt($aRubberGBox,$aMPos[0],$aMPos[1],$aMPos[2],$aMPos[3])
    Sleep(10)
    WEnd
    KoordinatenNeu()
    _GBoxDestroy($aRubberGBox)
    EndSwitch
    ElseIf $aMsg[1]=$hWDaten Then
    Switch $aMsg[0]
    Case $bFoto
    Fraktal_speichern()
    Case $bStart ;46
    Start()
    Case $bAbbrechen
    Abbrechen()
    Case $bRatio1
    $vRatio=Verhaeltniss(1)
    Case $bRatio2
    $vRatio=Verhaeltniss(2)
    Case $bRatio3
    $vRatio=Verhaeltniss(3)
    EndSwitch
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ; ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    Func Start()
    EingabeAuslesen()
    GUICtrlSetData($bStart,"STOP")
    GUICtrlSetBkColor($bStart,0x777777)
    GUICtrlSetData($lBreiteX_Achse,"Wert X-Achse: "&StringFormat("%.18f",$vBereichX))
    GUICtrlSetData($lBreiteY_Achse,"Wert Y-Achse: "&StringFormat("%.18f",$vBereichY))
    GUISetState(@SW_SHOW,$hWBild)
    WinActivate("Fraktal")
    GUISetBkColor(0X000000)
    GUISetState(@SW_SHOW,$hWDaten)

    [/autoit] [autoit][/autoit] [autoit]

    FarbTab_anlegen($vStepp)
    HotKeySet("{ESC}","CheckMaus")
    WinSetTitle($hWDaten,"","FFP - Datenfenster - - - 'ESC' stopt die Berechnung")
    Modul1()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func KoordinatenNeu()
    GUICtrlSetData($vStartX, $vXs+$vSteppX*($aMPos[0]-20))
    GUICtrlSetData($vEndX,$vXs+$vSteppX*($aMPos[2]-20))
    GUICtrlSetData($vStartY, $vYs+$vSteppY*($aMPos[1]-35))
    GUICtrlSetData($vEndY,$vYs+$vSteppY*($aMPos[3]-35))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Modul1() ;Formel Apfelbrot original

    [/autoit] [autoit][/autoit] [autoit]

    $vBeginn=TimerInit()
    $vStop=0
    $vYi=$vYs
    ;~ MsgBox(0,"","Breite von "&$vStartGrafikX&" - "&$vBreiteGrafik+$vStartGrafikX)
    For $vZeile=$vStartGrafikY to $vHoeheGrafik ; Pixel auf Y-Achse durchtackern
    GUICtrlSetData($vProgressbar, $vZeile*100/($vHoeheGrafik))
    GUICtrlSetData($vGruppeProzess,"Berechnet: "&StringFormat("%.2f",$vZeile*100/($vHoeheGrafik))&"%")
    $vYi=$vYi+$vSteppY
    $vXi=$vXs
    For $vSpalte=$vStartGrafikX to $vBreiteGrafik ; Pixel auf der X-Achse
    $vXi=$vXi+$vSteppX
    ;Berechnung des Fraktals
    $vDurchlauf=0
    $vInteration=0
    $vXt=0
    $vYt=0
    $vP=0
    While $vP=0
    $vX_tmp=$vXt*$vXt-$vYt*$vYt+$vXi
    $vYt=2*$vXt*$vYt+$vYi
    $vXt=$vX_tmp
    $vDurchlauf+=1
    ;~ $vInteration=$vXt*$vXt+$vYt*$vYt
    If ($vXt*$vXt+$vYt*$vYt)>$vmI Or $vDurchlauf>$vmD Then ExitLoop
    WEnd
    setPixel($dc,$vSpalte,$vZeile,Farbwert($vDurchlauf,$vmD)) ; DLL Funktion
    if $vStop=1 Then
    $vSpalte=$vBreiteGrafik+$vStartGrafikX
    $vZeile=$vHoeheGrafik+$vStartGrafikY
    EndIf
    Next
    Next
    Fraktal_speichern()
    GUICtrlSetData($bStart,"Start")
    ;~ MsgBox(0,"Rechenzeit","Dauer: "&Minute(timerdiff($vBeginn)))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckMaus()
    ;~ Opt("GUIOnEventMode",0)
    $vStop=1
    WinSetTitle($hWDaten,"","FFP - Datenfenster - - - Mit 'ESC' Berechnung gestoppt !")
    GUICtrlSetData($bStart,"Start")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Fraktal_speichern()
    _GDIPlus_Startup() ;Gdi starten
    $hGraphic = _GDIPlus_GraphicsCreateFromHDC ($dc)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($vBreiteGrafik,$vHoeheGrafik,$hGraphic) ;Buffer ertsellen 1. Teil
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Buffer erstellen 2. Teil
    $hKopie = _GDIPlus_BitmapCloneArea($hGraphic,20,35,200,200)
    ;~ MsgBox(0,"Kopie",$hKopie)
    DirCreate(@ScriptDir&"\Bilder")

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $vNr=0
    ;~ $vI=0
    ;~ While $vI=0
    ;~ if FileExists(@ScriptDir&"\Bilder\Test"&$vNr&".tiff") Then
    ;~ $vNr=$vNr+1
    ;~ Else
    ;~ $vDateiName=@ScriptDir&"\Bilder\Test"&$vNr&".tiff"
    ;~ $vI=1
    ;~ EndIf
    ;~ WEnd
    $vDateiName=@ScriptDir&"\Bilder\Test_1.jpg"
    ConsoleWrite($vDateiName)
    $sCLSID=_GDIPlus_EncodersGetCLSID("JPG")
    If _GDIPlus_ImageSaveToFile($hKopie,$vDateiName)Then ;Test: _"&@YEAR&@MON&@MDAY&"-"&@HOUR&":"&@MIN&":"&@SEC&"
    MsgBox(0,"Speichern ....","Bild wurde erfolgreich gespeichert !!! "&@error,3)
    Else
    MsgBox(0,"Error",@error)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Farbwert($vDurchlauf,$vmD)
    ;~ ConsoleWrite ("Farbe: "&$vColor&" - ")
    if $vDurchlauf>$vmD Then
    $vColor=0x000000
    Else
    $vColor="0x"&$aFarben[int(Int($vDurchlauf*100/$vmD)*($vFarbanzahl-1)/100)]
    EndIf
    Return $vColor
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func FarbTab_anlegen($vStepp)
    Switch $vStepp
    Case 1,2,4,8,16,32,64,128
    $vFarbanzahl=Int(256/$vStepp)^3
    Case Else
    $vFarbanzahl=Int(256/$vStepp+1)^3
    EndSwitch
    ToolTip("Generiere Farbtabelle mit "&$vFarbanzahl&"Farben")
    Dim $aFarben[$vFarbanzahl]
    ;~ ConsoleWrite("Array-Farbzahl: "&$vFarbanzahl&@CR&@CR)
    $vNr=0
    For $vR=0 To 255 Step $vStepp
    For $vG=0 To 255 Step $vStepp
    For $vB=0 To 255 Step $vStepp
    $aFarben[$vNr]=Hex($vR,2)&Hex($vG,2)&Hex($vB,2)
    $vNr+=1
    Next
    Next
    Next
    ToolTip("")
    ;~ _ArrayDisplay($aFarben)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Abbrechen()
    ;~ _GDIPlus_BrushDispose($hPinsel)
    ;~ _GDIPlus_PenDispose($hPinsel)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hKopie)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_Shutdown()
    DllClose($user32)
    DllClose($gdi32)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Verhaeltniss($vRatio)
    Select
    Case $vRatio=1
    GUICtrlSetStyle($vInputHoeheGrafik,$ES_READONLY)
    GUICtrlSetData($vInputHoeheGrafik,int(StringReplace(GUICtrlRead($vInputBeiteGrafik),".","")/4*3))
    $vRatio=1/4*3
    Case $vRatio=2
    GUICtrlSetStyle($vInputHoeheGrafik,$ES_READONLY)
    GUICtrlSetData($vInputHoeheGrafik,int(StringReplace(GUICtrlRead($vInputBeiteGrafik),".","")/16*9))
    $vRatio=1/16*9
    ; Code folgt noch
    Case $vRatio=3
    GUICtrlSetStyle($vInputHoeheGrafik,$GUI_SS_DEFAULT_INPUT)
    $vRatio=1/GUICtrlRead($vInputBeiteGrafik)*GUICtrlRead($vInputHoeheGrafik)
    EndSelect
    ;~
    Return $vRatio
    EndFunc

    Func EingabeAuslesen()
    $vXs=GUICtrlRead($vStartX) ;Startwert für X
    $vXe=GUICtrlRead($vEndX) ;Endwert für X
    $vYs=GUICtrlRead($vStartY) ;Startwert für Y
    $vYe=GUICtrlRead($vEndY) ;Endwert für Y
    $vmD=GUICtrlRead($vMaxDurchlauf) ;maxAnzahl der Dürchläufe
    $vmI=GUICtrlRead($vMaxIteration) ;MaxWert Iteration
    $vStepp=GUICtrlRead($vZoom) ;Farbfaktor auslesen
    $vBreiteGrafik=GUICtrlRead($vInputBeiteGrafik) ; Grafikbreite auslesen
    $vHoeheGrafik=GUICtrlRead($vInputHoeheGrafik) ;Grafikhöhe auslesen
    $vPalette1=BitAND(GUICtrlRead($bPalette1), $GUI_CHECKED) ;Wleche Palette ist aktiv
    $vPalette2=BitAND(GUICtrlRead($bPalette2), $GUI_CHECKED)
    $vPalette3=BitAND(GUICtrlRead($bPalette3), $GUI_CHECKED)
    ; Wertebereich ermitteln
    If $vXs<0 and $vXe<0 Then $vBereichX=($vXs+$vXe*-1)*-1
    If $vXs<0 and $vXe>0 Then $vBereichX=$vXs*-1+$vXe
    If $vXs>0 and $vXe>0 Then $vBereichX=$vXe-$vXs
    If $vYs<0 and $vYe<0 Then $vBereichY=($vYs+$vYe*-1)*-1
    If $vYs<0 and $vYe>0 Then $vBereichY=$vYs*-1+$vYe
    If $vYs>0 and $vYe>0 Then $vBereichY=$vYe-$vYs
    $vSteppX=$vBereichX/$vBreiteGrafik ;Schritweite für X errechnen
    $vSteppY=$vBereichY/$vHoeheGrafik ;Schritweite für Y errechnen
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func setpixel($dc, $x, $y, $color) ;pixel mit farbe an koordinaten setzen
    DllCall($gdi32, "long", "SetPixel", "long", $dc, "long", $x, "long", $y, "long", $color)
    EndFunc ;==>pix

    [/autoit] [autoit][/autoit] [autoit]

    Func GetDC($handle)
    $dc = DllCall($user32, "int", "GetDC", "hwnd", $handle)
    Return $dc[0]
    EndFunc ;==>GetDC

    [/autoit] [autoit][/autoit] [autoit]

    Func Minute($zLZ)
    $tM=-1
    $th=-1
    $zLZ=int($zLZ/1000)
    for $tI=$zLZ to 0 step -60 ;Minuten ausrechnen
    $tM+=1
    Next
    If $tM>59 Then
    for $tI=$tM to 0 step -60 ;Stunden ausrechnen
    $th+=1
    Next
    EndIf
    If $tM<1 Then
    $zLZ=$zLZ&" Sekunden"
    ElseIf $tM>=1 And $th<1 Then
    $zLZ=$tM&"."&StringFormat("%02s",$zLZ-$tM*60)&" Minuten"
    ElseIf $tM>=1 And $th>=1 Then
    $zLZ=$th&"."&$tM-$th*60&"."&StringFormat("%02s",$zLZ-$tM*60)&" Stunden"
    EndIf
    Return $zLZ
    EndFunc

    [/autoit]

    Wenn Du's eilig hast - geh langsam...

  • Probiere es mal damit:

    Spoiler anzeigen
    [autoit]


    #include-once
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <ButtonConstants.au3>
    #include <GdiPlus.au3>
    #Include <Array.au3>
    #include <EditConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;~ #include <_GUIBox.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup() ;Gdi+ starten
    ;------------------------------------------------------------
    Global $vXs,$vXe,$vYs,$vYe,$vSpalte,$vZeile,$vStarX,$vEndX,$vStarY,$vEndY,$vDurchlauf,$vMaxDurchlauf,$vBereichX,$vBereichY,$vmI,$vmD
    Global $vBreiteGrafik, $vHoeheGrafik, $vStartGrafikX, $vStartGrafikY, $vSteppX, $vSteppY
    Global $Ratio1, $Ratio2, $Ratio3, $aMPos[4],$vRatio
    Global $vDisplayBreite, $vDisplayHoehe

    [/autoit] [autoit][/autoit] [autoit]

    Global $nMsg,$hGraphic,$hPinsel,$vInteration,$aFarben[0],$vFarbanzahl,$vStop,$hBitmap,$hBuffer,$vStepp,$hKopie,$dc

    [/autoit] [autoit][/autoit] [autoit]

    $user32 = DllOpen("user32.dll")
    $gdi32 = DllOpen("gdi32.dll")

    [/autoit] [autoit][/autoit] [autoit]

    $vDisplayBreite=@DesktopWidth-20;
    $vDisplayHoehe=@DesktopHeight-20;
    $vStartGrafikX=10
    $vStartGrafikY=10

    [/autoit] [autoit][/autoit] [autoit]

    $hWBild = GUICreate("Fraktal",$vDisplayBreite,$vDisplayHoehe-20, -1, 0)
    $dc = GetDC(WinGetHandle($hWBild))
    $hBitmap_Save = _GDIPlus_BitmapCreateFromScan0($vDisplayBreite,$vDisplayHoehe-20)
    $hWDaten=GUICreate("FFP - Datenfenster",$vDisplayBreite,150,-1,@DesktopHeight-170,-1,-1,$hWBild)

    [/autoit] [autoit][/autoit] [autoit]

    ; Eingabe der Eckdaten zur Berechnung
    GUICtrlCreateGroup("Werte für die X - und Y - Achse",5,4,236,113)
    GUICtrlCreateLabel("Startwert:",37,19)
    GUICtrlCreateLabel("Endwert:",140,19)
    GUICtrlCreateLabel("X:",12,39)
    $vStartX=GUICtrlCreateInput("-2.50", 28, 35, 100, 20)
    $vEndX=GUICtrlCreateInput("+1.00", 131, 35, 100, 20)
    GUICtrlCreateLabel("Y:",13,61)
    $vStartY=GUICtrlCreateInput("-1.40", 28, 58, 100, 20)
    $vEndY=GUICtrlCreateInput("+1.40", 131, 58, 100, 20)
    $lBreiteX_Achse=GUICtrlCreateLabel("Wert X-Achse: ",12,81,200,12)
    $lBreiteY_Achse=GUICtrlCreateLabel("Wert Y-Achse: ",12,97,200,12)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Eingabe der Eckdaten zur Berechnung
    GUICtrlCreateGroup("",250,4,180,62)
    GUICtrlCreateLabel("max. Durchläufe:",275,19)
    $vMaxDurchlauf=GUICtrlCreateInput("100", 360, 17, 60, 20)
    GUICtrlCreateLabel("Höchstwert Iteration:",259,41)
    $vMaxIteration=GUICtrlCreateInput("1000", 360, 39, 60, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    GUICtrlCreateGroup("Farbraster",250,70,180,39)
    GUICtrlCreateLabel("Faktor:",296,85)
    $vZoom=GUICtrlCreateInput("23", 360, 83, 60, 20)
    $updown = GUICtrlCreateUpdown($vZoom)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Gruppe Grafikgröße in Pixel
    GUICtrlCreateGroup("Grafikgröße - waagerecht x senkrecht",440,4,200,62)
    $vInputBeiteGrafik=GUICtrlCreateInput($vDisplayBreite, 470, 30, 60, 20) ;$vDisplayBreite
    $vBeiteGrafikTMP=GUICtrlCreateUpdown($vInputBeiteGrafik)
    GUICtrlCreateLabel("X",537,31)
    $vInputHoeheGrafik=GUICtrlCreateInput($vDisplayHoehe, 550, 30, 60, 20)
    $vHoeheGrafikTMP=GUICtrlCreateUpdown($vInputHoeheGrafik)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Gruppe Seitenverhältnis
    GUICtrlCreateGroup("Seitenverhältnis der Grafik",440,70,200,39)
    $bRatio1 = GUICtrlCreateRadio("4 : 3", 450, 85, 50, 20) ; = 0.75 oder 1.33333
    $bRatio2 = GUICtrlCreateRadio("16 : 9", 520, 85, 50, 20) ; = 0.5625 oder 1.777778
    $bRatio3 = GUICtrlCreateRadio("ohne", 590, 85, 45, 20)
    GUICtrlSetState($bRatio3, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; ----------------------------------------------------------------------------
    GUICtrlCreateGroup("Auswahl der Farbpalette",650,4,130,105)
    $bPalette1 = GUICtrlCreateRadio("Farbpalette 1", 670, 30, 100, 20)
    $bPalette2 = GUICtrlCreateRadio("Farbpalette 2", 670, 52, 100, 20)
    $bPalette3 = GUICtrlCreateRadio("Farbpalette 3", 670, 74, 100, 20)
    GUICtrlSetState($bPalette1, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; Gruppe Prozessbar
    $vGruppeProzess=GUICtrlCreateGroup("Fortschritt",$vDisplayBreite-220,79,210,30)
    $vProgressbar = GUICtrlCreateProgress($vDisplayBreite-216, 92, 200, 10, $PBS_SMOOTH)
    GUICtrlSetColor(-1, 32250)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
    ; ------------------------------ Fußzeile ---------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------
    $bFoto=GUICtrlCreateButton("Bild speichern",$vDisplayBreite-220,8,100,20)
    $bStart=GUICtrlCreateButton("Start",$vDisplayBreite-110,35,100,40,$BS_DEFPUSHBUTTON)
    $bAbbrechen=GUICtrlCreateButton("Beenden",$vDisplayBreite-220,35,100,40)
    GUISetState(@SW_SHOW,$hWBild)
    WinActivate("Fraktal")
    GUISetBkColor(0X000000)
    GUISetState(@SW_SHOW,$hWDaten)

    [/autoit] [autoit][/autoit] [autoit]

    GUISwitch($hWDaten)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    ;~ $nMsg=GUIGetMsg()
    $aMsg = GUIGetMsg(1)
    If $aMsg[1]=$hWBild Then
    Switch $aMsg[0]
    Case $GUI_EVENT_PRIMARYDOWN
    ;~ $aRubberGBox=_GBoxCreate("",2,0xFF0000)
    $aMPos[0]=MouseGetPos(0)
    $aMPos[1]=MouseGetPos(1)
    while _IsPressed("01",$user32)
    $aMPos[2]=MouseGetPos(0)
    $aMPos[3]=MouseGetPos(1)
    ;~ MsgBox(0,"$vRatio",$vRatio)
    ;~ $aMPos[3]=$aMPos[1]+($aMPos[2]-$aMPos[0])*0.75

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $vRatioTMP=($aMPos[2]-$aMPos[0])*$vRatio
    ;~ ToolTip("Position: "&$aMPos[0]&"x"&$aMPos[1]&" - - "&$aMPos[2]&"x"&$aMPos[3]&" R: "&$vRatio)
    ;~ _GBoxShowAt($aRubberGBox,$aMPos[0],$aMPos[1],$aMPos[2],$aMPos[3])
    Sleep(10)
    WEnd
    KoordinatenNeu()
    ;~ _GBoxDestroy($aRubberGBox)
    EndSwitch
    ElseIf $aMsg[1]=$hWDaten Then
    Switch $aMsg[0]
    Case $bFoto
    Fraktal_speichern()
    Case $bStart ;46
    Start()
    Case $bAbbrechen
    Abbrechen()
    Case $bRatio1
    $vRatio=Verhaeltniss(1)
    Case $bRatio2
    $vRatio=Verhaeltniss(2)
    Case $bRatio3
    $vRatio=Verhaeltniss(3)
    EndSwitch
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ; ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    Func Start()
    EingabeAuslesen()
    GUICtrlSetData($bStart,"STOP")
    GUICtrlSetBkColor($bStart,0x777777)
    GUICtrlSetData($lBreiteX_Achse,"Wert X-Achse: "&StringFormat("%.18f",$vBereichX))
    GUICtrlSetData($lBreiteY_Achse,"Wert Y-Achse: "&StringFormat("%.18f",$vBereichY))
    GUISetState(@SW_SHOW,$hWBild)
    WinActivate("Fraktal")
    GUISetBkColor(0X000000)
    GUISetState(@SW_SHOW,$hWDaten)

    [/autoit] [autoit][/autoit] [autoit]

    FarbTab_anlegen($vStepp)
    HotKeySet("{ESC}","CheckMaus")
    WinSetTitle($hWDaten,"","FFP - Datenfenster - - - 'ESC' stopt die Berechnung")
    Modul1()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func KoordinatenNeu()
    GUICtrlSetData($vStartX, $vXs+$vSteppX*($aMPos[0]-20))
    GUICtrlSetData($vEndX,$vXs+$vSteppX*($aMPos[2]-20))
    GUICtrlSetData($vStartY, $vYs+$vSteppY*($aMPos[1]-35))
    GUICtrlSetData($vEndY,$vYs+$vSteppY*($aMPos[3]-35))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Modul1() ;Formel Apfelbrot original

    [/autoit] [autoit][/autoit] [autoit]

    $vBeginn=TimerInit()
    $vStop=0
    $vYi=$vYs
    ;~ MsgBox(0,"","Breite von "&$vStartGrafikX&" - "&$vBreiteGrafik+$vStartGrafikX)
    For $vZeile=$vStartGrafikY to $vHoeheGrafik ; Pixel auf Y-Achse durchtackern
    GUICtrlSetData($vProgressbar, $vZeile*100/($vHoeheGrafik))
    GUICtrlSetData($vGruppeProzess,"Berechnet: "&StringFormat("%.2f",$vZeile*100/($vHoeheGrafik))&"%")
    $vYi=$vYi+$vSteppY
    $vXi=$vXs
    For $vSpalte=$vStartGrafikX to $vBreiteGrafik ; Pixel auf der X-Achse
    $vXi=$vXi+$vSteppX
    ;Berechnung des Fraktals
    $vDurchlauf=0
    $vInteration=0
    $vXt=0
    $vYt=0
    $vP=0
    While $vP=0
    $vX_tmp=$vXt*$vXt-$vYt*$vYt+$vXi
    $vYt=2*$vXt*$vYt+$vYi
    $vXt=$vX_tmp
    $vDurchlauf+=1
    ;~ $vInteration=$vXt*$vXt+$vYt*$vYt
    If ($vXt*$vXt+$vYt*$vYt)>$vmI Or $vDurchlauf>$vmD Then ExitLoop
    WEnd
    setPixel($dc,$vSpalte,$vZeile,Farbwert($vDurchlauf,$vmD)) ; DLL Funktion
    if $vStop=1 Then
    $vSpalte=$vBreiteGrafik+$vStartGrafikX
    $vZeile=$vHoeheGrafik+$vStartGrafikY
    EndIf
    Next
    Next
    Fraktal_speichern()
    GUICtrlSetData($bStart,"Start")
    ;~ MsgBox(0,"Rechenzeit","Dauer: "&Minute(timerdiff($vBeginn)))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckMaus()
    ;~ Opt("GUIOnEventMode",0)
    $vStop=1
    WinSetTitle($hWDaten,"","FFP - Datenfenster - - - Mit 'ESC' Berechnung gestoppt !")
    GUICtrlSetData($bStart,"Start")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Fraktal_speichern()
    $vDateiName=@ScriptDir&"\Bilder\Test_1.jpg"
    ConsoleWrite($vDateiName)
    If _GDIPlus_ImageSaveToFile($hBitmap_Save,$vDateiName)Then ;Test: _"&@YEAR&@MON&@MDAY&"-"&@HOUR&":"&@MIN&":"&@SEC&"
    MsgBox(0,"Speichern ....","Bild wurde erfolgreich gespeichert !!! "&@error,3)
    Else
    MsgBox(0,"Error",@error)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Farbwert($vDurchlauf,$vmD)
    ;~ ConsoleWrite ("Farbe: "&$vColor&" - ")
    if $vDurchlauf>$vmD Then
    $vColor=0x000000
    Else
    $vColor="0x"&$aFarben[int(Int($vDurchlauf*100/$vmD)*($vFarbanzahl-1)/100)]
    EndIf
    Return $vColor
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func FarbTab_anlegen($vStepp)
    Switch $vStepp
    Case 1,2,4,8,16,32,64,128
    $vFarbanzahl=Int(256/$vStepp)^3
    Case Else
    $vFarbanzahl=Int(256/$vStepp+1)^3
    EndSwitch
    ToolTip("Generiere Farbtabelle mit "&$vFarbanzahl&"Farben")
    Dim $aFarben[$vFarbanzahl]
    ;~ ConsoleWrite("Array-Farbzahl: "&$vFarbanzahl&@CR&@CR)
    $vNr=0
    For $vR=0 To 255 Step $vStepp
    For $vG=0 To 255 Step $vStepp
    For $vB=0 To 255 Step $vStepp
    $aFarben[$vNr]=Hex($vR,2)&Hex($vG,2)&Hex($vB,2)
    $vNr+=1
    Next
    Next
    Next
    ToolTip("")
    ;~ _ArrayDisplay($aFarben)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Abbrechen()
    ;~ _GDIPlus_BrushDispose($hPinsel)
    ;~ _GDIPlus_PenDispose($hPinsel)
    _GDIPlus_BitmapDispose($hBitmap_Save)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hKopie)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_Shutdown()
    DllClose($user32)
    DllClose($gdi32)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Verhaeltniss($vRatio)
    Select
    Case $vRatio=1
    GUICtrlSetStyle($vInputHoeheGrafik,$ES_READONLY)
    GUICtrlSetData($vInputHoeheGrafik,int(StringReplace(GUICtrlRead($vInputBeiteGrafik),".","")/4*3))
    $vRatio=1/4*3
    Case $vRatio=2
    GUICtrlSetStyle($vInputHoeheGrafik,$ES_READONLY)
    GUICtrlSetData($vInputHoeheGrafik,int(StringReplace(GUICtrlRead($vInputBeiteGrafik),".","")/16*9))
    $vRatio=1/16*9
    ; Code folgt noch
    Case $vRatio=3
    GUICtrlSetStyle($vInputHoeheGrafik,$GUI_SS_DEFAULT_INPUT)
    $vRatio=1/GUICtrlRead($vInputBeiteGrafik)*GUICtrlRead($vInputHoeheGrafik)
    EndSelect
    ;~
    Return $vRatio
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func EingabeAuslesen()
    $vXs=GUICtrlRead($vStartX) ;Startwert für X
    $vXe=GUICtrlRead($vEndX) ;Endwert für X
    $vYs=GUICtrlRead($vStartY) ;Startwert für Y
    $vYe=GUICtrlRead($vEndY) ;Endwert für Y
    $vmD=GUICtrlRead($vMaxDurchlauf) ;maxAnzahl der Dürchläufe
    $vmI=GUICtrlRead($vMaxIteration) ;MaxWert Iteration
    $vStepp=GUICtrlRead($vZoom) ;Farbfaktor auslesen
    $vBreiteGrafik=GUICtrlRead($vInputBeiteGrafik) ; Grafikbreite auslesen
    $vHoeheGrafik=GUICtrlRead($vInputHoeheGrafik) ;Grafikhöhe auslesen
    $vPalette1=BitAND(GUICtrlRead($bPalette1), $GUI_CHECKED) ;Wleche Palette ist aktiv
    $vPalette2=BitAND(GUICtrlRead($bPalette2), $GUI_CHECKED)
    $vPalette3=BitAND(GUICtrlRead($bPalette3), $GUI_CHECKED)
    ; Wertebereich ermitteln
    If $vXs<0 and $vXe<0 Then $vBereichX=($vXs+$vXe*-1)*-1
    If $vXs<0 and $vXe>0 Then $vBereichX=$vXs*-1+$vXe
    If $vXs>0 and $vXe>0 Then $vBereichX=$vXe-$vXs
    If $vYs<0 and $vYe<0 Then $vBereichY=($vYs+$vYe*-1)*-1
    If $vYs<0 and $vYe>0 Then $vBereichY=$vYs*-1+$vYe
    If $vYs>0 and $vYe>0 Then $vBereichY=$vYe-$vYs
    $vSteppX=$vBereichX/$vBreiteGrafik ;Schritweite für X errechnen
    $vSteppY=$vBereichY/$vHoeheGrafik ;Schritweite für Y errechnen
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func setpixel($dc, $x, $y, $color) ;pixel mit farbe an koordinaten setzen
    DllCall($gdi32, "long", "SetPixel", "long", $dc, "long", $x, "long", $y, "long", $color)
    _GDIPlus_BitmapSetPixel($hBitmap_Save, $x, $y, 0xFF000000 + $color)
    EndFunc ;==>pix

    [/autoit] [autoit][/autoit] [autoit]

    Func GetDC($handle)
    $dc = DllCall($user32, "int", "GetDC", "hwnd", $handle)
    Return $dc[0]
    EndFunc ;==>GetDC

    [/autoit] [autoit][/autoit] [autoit]

    Func Minute($zLZ)
    $tM=-1
    $th=-1
    $zLZ=int($zLZ/1000)
    for $tI=$zLZ to 0 step -60 ;Minuten ausrechnen
    $tM+=1
    Next
    If $tM>59 Then
    for $tI=$tM to 0 step -60 ;Stunden ausrechnen
    $th+=1
    Next
    EndIf
    If $tM<1 Then
    $zLZ=$zLZ&" Sekunden"
    ElseIf $tM>=1 And $th<1 Then
    $zLZ=$tM&"."&StringFormat("%02s",$zLZ-$tM*60)&" Minuten"
    ElseIf $tM>=1 And $th>=1 Then
    $zLZ=$th&"."&$tM-$th*60&"."&StringFormat("%02s",$zLZ-$tM*60)&" Stunden"
    EndIf
    Return $zLZ
    EndFunc

    [/autoit]

    Ich habe die Funktionen aus _GUIBox.au3 auskommentiert...


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • UEZ

    Vielen Dank für Deine Mühe...
    Werde Deinen Vorschlag in den nächsten Tagen testen.

    Die GUIBox.au3 habe ich verwendet um nach der Berechnung ein Teil der Grafik zu markieren und dann in voller Größe neu zuberechnen.

    Erstmal vielen Dank und ein schönes WE

    Wenn Du's eilig hast - geh langsam...

  • Na das is ja ein Ding ! Ich hatte mich schon über die GDI+-Funktion "SetPixel" gewundert ... ist aber noch vorstellbar. Aber "CreatBitmapFromScan0" kenn ich gar nicht. Ich suche immer in der Hilfe nach einer passenden Funktion ... da sind beide nicht beschrieben. Ich hab sie nun gefunden - in der au3 direkt. Das schau ich mir an. Danke für den Tip. Aber was soll die "CreatBitmapFromScan0" machen bzw. welches Fenster wird da gescannt ? Man könnte vermuten: das aktive...

    Die GUIBox.au3 in meiner Anwendung ist eine Variante des "Gummibandes" bzw. Rubberbanding - flexibles Rechteck -> Enddaten werden zur Neuberechnung der Koordinaten verwendet.

    Vorerst Danke...

    Wenn Du's eilig hast - geh langsam...

  • In der aktuellen AutoIt sollten die GDI+ Funktionen beschrieben sein.

    CreatBitmapFromScan0 erstellt einfach eine leere Bitmap, nicht mehr, nicht weniger.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯