StartDrawing() mit und ohne Debugger unterschiedlich?

Für allgemeine Fragen zur Programmierung mit PureBasic.
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von fabulouspaul »

Hallo zusammen,

ich hab da ein problem, da brauche ich etwas Unterstützung. Ich bastle gerade an zwei kleinen Prozeduren, die ein Bild von 32 auf 24 Bit Farbtiefe konvertieren und umgekehrt. Dabei bin ich auf ein Phänomen gestossen, was ich nicht erklären kann: führe ich das programm ohne Debugger aus, dann läuft es auf einen Fehler bei der Funktion StartDrawing(). Führe ich das selbe Programm im Debugger aus, läuft es.

Hier der Das Programm:

Code: Alles auswählen

Structure pixel24   ;RGB-Struktur ohne Alpha-Kanal
    pixel_r.c
    pixel_g.c
    pixel_b.c
  EndStructure
  
  Structure pixel32   ;RGB-Struktur mit Alpha-Kanal
    pix_r.c
    pix_g.c
    pix_b.c
    pix_a.c
  EndStructure
  
Procedure konvertiere24nach32(bildnummer)
 
  kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 32)
  If kopie
    org_output = ImageOutput(bildnummer)
    If StartDrawing(org_output)
      *org_adr.pixel24 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Original) fehlgeschlagen!")
      End
    EndIf
    
    kopie_output = ImageOutput(kopie)
    If StartDrawing(kopie_output)
      *kopie_adr.pixel32 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
      End      
    EndIf
    
    For i = 1 To ImageWidth(bildnummer) * ImageHeight(bildnummer)
      *kopie_adr\pix_r = *org_adr\pixel_r
      *kopie_adr\pix_g = *org_adr\pixel_g
      *kopie_adr\pix_b = *org_adr\pixel_b
      *kopie_adr\pix_a = 0
      *kopie_adr + 4
      *org_adr + 3
    Next
    
    CopyImage(kopie, bildnummer)
    FreeImage(kopie)
  EndIf
EndProcedure  
 
Procedure konvertiere32nach24(bildnummer)
  
  kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 24)
  If kopie
    org_output = ImageOutput(bildnummer)
    If StartDrawing(org_output)
      *org_adr.pixel32 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Original) fehlgeschlagen!")
      End      
    EndIf
    
    kopie_output = ImageOutput(kopie)
    If StartDrawing(kopie_output)
      *kopie_adr.pixel24 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
      End      
    EndIf
    
    For i = 1 To ImageWidth(bildnummer) * ImageHeight(bildnummer)
      *kopie_adr\pixel_r = *org_adr\pix_r
      *kopie_adr\pixel_g = *org_adr\pix_g
      *kopie_adr\pixel_b = *org_adr\pix_b
      *kopie_adr + 3
      *org_adr + 4
    Next
    
    CopyImage(kopie, bildnummer)    
    FreeImage(kopie)
  EndIf 
EndProcedure

UseJPEGImageDecoder()

original = LoadImage(#PB_Any,"H:\800x600\Image03.jpg")
original_id = ImageID(original)

If OpenWindow(0, 216, 0, 800, 600, "32<->24 Bit-Konvertierung",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  
    ImageGadget(1, 0, 0, 800, 600, original_id) 
    
    MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
    
    konvertiere24nach32(original)
    
    SetGadgetState(1, original_id) 
    
    MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))

    konvertiere32nach24(original)
    
    SetGadgetState(1, original_id) 
    
    MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
    
EndIf

MessageRequester("Ende", "Programm-Ende")

End
Bei der Routine konvertiere32nach24() gibt es beim 2. StartDrawing() einen Fehler (oder eben auch nicht).
Kann mir das jemand erklären?!

Grüße,
Paul
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von Sirius-2337 »

Mit Debugger bekomme ich in Zeile 45 folgended Fehler
[19:15:37] [ERROR] #Image object number is very high (over 100000), are You sure of that ?
Ich vermute mal ohne Debugger wird dieser Fehler ignoriert und führt später zu deinem Problem.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von ts-soft »

Wie wäre es erstmal mit EnableExplicit, um Fehler auszuschliessen. Dann fehlt jegliche EventSchleife für das
Fenster, die Ereignisse mit SetGadgetState können also garnicht abgearbeitet werden!

Und wenn dann noch Fehler, sehen wir weiter :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von STARGÅTE »

unabhängig von deinem eigentlichen Problem, möchte ich dir raten auch DrawingBufferPixelFormat() und DrawingBufferPitch () zu verwenden.
Nur so kannst du herausfinden in welchem Byte-Format das Bild existiert und vorallem wie viel Byte eine Zeile hat!
denn die Pixel sind nicht alle hintereinander!
DrawingBufferPitch hat geschrieben:Gibt die tatsächliche Länge einer Zeile des aktuellen Buffers in Bytes zurück. Das Ergebnis kann - wegen zusätzlichem "Padding" (Auffüllen) - größer als die Breite der Ausgabe multipliziert mit der Pixel-Größe sein
Unter Umständen erklärt sich dadurch auch dein problem, weil du u.u. in Falsche Speicher schreibst!

Außerdem solltest du

Code: Alles auswählen

For i = 1 To ImageWidth(bildnummer) * ImageHeight(bildnummer)
;[...]
Next
vermeiden, da du bei diesem Code in jedem Durchlauf erneut die Breite und Höhe ermittels un diese Multiplizierst.
Das ist unnötige Zeit-"verschwendung".

Desweiteren sind die Farb-Kanäle nicht vom Typ .c (Character (1 oder 2 Bytes)) sonden immer .a (Ascii, immer 1 Byte)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von fabulouspaul »

...gerne ergebe ich mich den wohlgemeinten Ratschlägen. Hier also nochmal die Variante MIT EnableExplicit und Event-Schleife für's Fenster:

Code: Alles auswählen

EnableExplicit

Structure pixel24   ;RGB-Struktur ohne Alpha-Kanal
  pixel_r.c
  pixel_g.c
  pixel_b.c
EndStructure
  
Structure pixel32   ;RGB-Struktur mit Alpha-Kanal
  pix_r.c
  pix_g.c
  pix_b.c
  pix_a.c
EndStructure
  
Procedure konvertiere24nach32(bildnummer)
 
  Define kopie
  Define org_output
  Define *org_adr.pixel24
  Define kopie_output
  Define *kopie_adr.pixel32
  Define i
  
  kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 32)
  If kopie
    org_output = ImageOutput(bildnummer)
    If StartDrawing(org_output)
      *org_adr.pixel24 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Original) fehlgeschlagen!")
      End
    EndIf
    
    kopie_output = ImageOutput(kopie)
    If StartDrawing(kopie_output)
      *kopie_adr.pixel32 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
      End      
    EndIf
    
    For i = 1 To ImageWidth(bildnummer) * ImageHeight(bildnummer)
      *kopie_adr\pix_r = *org_adr\pixel_r
      *kopie_adr\pix_g = *org_adr\pixel_g
      *kopie_adr\pix_b = *org_adr\pixel_b
      *kopie_adr\pix_a = 0
      *kopie_adr + 4
      *org_adr + 3
    Next
    
    CopyImage(kopie, bildnummer)
    FreeImage(kopie)
  EndIf
EndProcedure  
 
Procedure konvertiere32nach24(bildnummer)
  
  Define kopie
  Define org_output
  Define *org_adr.pixel32
  Define kopie_output
  Define *kopie_adr.pixel24
  Define i
   
  kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 24)
  If kopie
    org_output = ImageOutput(bildnummer)
    If StartDrawing(org_output)
      *org_adr.pixel32 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Original) fehlgeschlagen!")
      End      
    EndIf
    
    kopie_output = ImageOutput(kopie)
    If StartDrawing(kopie_output)
      *kopie_adr.pixel24 = DrawingBuffer()
      StopDrawing()
    Else
      MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
      End      
    EndIf
    
    For i = 1 To ImageWidth(bildnummer) * ImageHeight(bildnummer)
      *kopie_adr\pixel_r = *org_adr\pix_r
      *kopie_adr\pixel_g = *org_adr\pix_g
      *kopie_adr\pixel_b = *org_adr\pix_b
      *kopie_adr + 3
      *org_adr + 4
    Next
    
    CopyImage(kopie, bildnummer)    
    FreeImage(kopie)
  EndIf 
EndProcedure

UseJPEGImageDecoder()

Define original
Define original_id
Define Event
Define Quit

original = LoadImage(#PB_Any,"H:\800x600\Image03.jpg")
original_id = ImageID(original)

If OpenWindow(0, 216, 0, 800, 600, "32<->24 Bit-Konvertierung",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
    
    ImageGadget(1, 0, 0, 800, 600, original_id) 
    
    MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
    
    konvertiere24nach32(original)
    
    SetGadgetState(1, original_id) 
    
    MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
    
    konvertiere32nach24(original)
    
    SetGadgetState(1, original_id) 
    
    MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
    
  Until Quit = 1

  CloseWindow(0)

  EndIf

End
...leider aber auch noch immer mit selbem Fehler :(
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von STARGÅTE »

Wie Sirius-2337 schon schreib, darfst du eine durch #PB_Any erstellte Nummer nicht selbst verwenden!

Das heißt bei CopyImage() entweder wieder #PB_Any nutzen, oder einen echten Index verwenden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von fabulouspaul »

STARGÅTE hat geschrieben:Wie Sirius-2337 schon schreib, darfst du eine durch #PB_Any erstellte Nummer nicht selbst verwenden!

Das heißt bei CopyImage() entweder wieder #PB_Any nutzen, oder einen echten Index verwenden.
Hmmm jep! Genau da lag der Hase im Pfeffer!
Die anderen Tips waren auch gut und wichtig, aber letztlich hätte alles auch in der ursprünglichen Fassung funktioniert, wenn ich beim CopyImage() ein neues Image als Original erzeugt hätte und den Speicher der alten Fassung freigegeben hätte.

So sieht's jetzt mit allen Änderungen aus:

Code: Alles auswählen

EnableExplicit

UseJPEGImageDecoder()

Global original
Define Event
Define Quit

Structure pixel24   ;RGB-Struktur ohne Alpha-Kanal
  pixel_r.a
  pixel_g.a
  pixel_b.a
EndStructure
  
Structure pixel32   ;RGB-Struktur mit Alpha-Kanal
  pix_r.a
  pix_g.a
  pix_b.a
  pix_a.a
EndStructure
  
Procedure konvertiere24nach32(bildnummer)
  
  Define org_output
  Define *org_adr.pixel24
  Define org_zeilenlaenge
  Define org_hoehe
  Define org_breite
  Define kopie
  Define kopie_output
  Define *kopie_adr.pixel32
  Define kopie_zeilenlaenge
  Define i
  Define j
  Define k
  Define l
  
  kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 32)
  If kopie
    org_output = ImageOutput(bildnummer)
    If StartDrawing(org_output)
        *org_adr.pixel24 = DrawingBuffer()
        org_zeilenlaenge = DrawingBufferPitch()
        org_hoehe = ImageHeight(bildnummer)
        org_breite = ImageWidth(bildnummer)
      StopDrawing()
    Else
      MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Original) fehlgeschlagen!")
      End
    EndIf
    
    kopie_output = ImageOutput(kopie)
    If StartDrawing(kopie_output)
        *kopie_adr.pixel32 = DrawingBuffer()
        kopie_zeilenlaenge = DrawingBufferPitch()
      StopDrawing()
    Else
      MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
      End      
    EndIf
    
    For i = 1 To org_hoehe
      k = org_zeilenlaenge
      l = kopie_zeilenlaenge
      For j = 1 To org_breite
        *kopie_adr\pix_r = *org_adr\pixel_r
        *kopie_adr\pix_g = *org_adr\pixel_g
        *kopie_adr\pix_b = *org_adr\pixel_b
        *kopie_adr\pix_a = 255
        *kopie_adr + 4
        *org_adr + 3
        k - 3
        l - 4
      Next
      *org_adr + k
      *kopie_adr + l
    Next
    
    original = CopyImage(kopie, #PB_Any)
    FreeImage(kopie)
    FreeImage(bildnummer)
  EndIf
EndProcedure  
 
Procedure konvertiere32nach24(bildnummer)
  
  Define org_output
  Define *org_adr.pixel32
  Define org_zeilenlaenge
  Define org_hoehe
  Define org_breite
  Define kopie
  Define kopie_output
  Define *kopie_adr.pixel24
  Define kopie_zeilenlaenge
  Define i
  Define j
  Define k
  Define l
   
  kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 24)
  If kopie
    org_output = ImageOutput(bildnummer)
    If StartDrawing(org_output)
        *org_adr.pixel32 = DrawingBuffer()
        org_zeilenlaenge = DrawingBufferPitch()
        org_hoehe = ImageHeight(bildnummer)
        org_breite = ImageWidth(bildnummer)
      StopDrawing()
    Else
      MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Original) fehlgeschlagen!")
      End      
    EndIf
    
    kopie_output = ImageOutput(kopie)
    If StartDrawing(kopie_output)
        *kopie_adr.pixel24 = DrawingBuffer()
        kopie_zeilenlaenge = DrawingBufferPitch()
      StopDrawing()
    Else
      MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
      End      
    EndIf
    
    For i = 1 To org_hoehe
      k = org_zeilenlaenge
      l = kopie_zeilenlaenge
      For j = 1 To org_breite
        *kopie_adr\pixel_r = *org_adr\pix_r
        *kopie_adr\pixel_g = *org_adr\pix_g
        *kopie_adr\pixel_b = *org_adr\pix_b
        *kopie_adr + 3
        *org_adr + 4
        k - 4
        l - 3
      Next
      *org_adr + k
      *kopie_adr + l
    Next
    
    original = CopyImage(kopie, #PB_Any)    
    FreeImage(kopie)
    FreeImage(bildnummer)
  EndIf 
EndProcedure

original = LoadImage(#PB_Any,"H:\800x600\Image03.jpg")

If OpenWindow(0, 216, 0, 800, 600, "32<->24 Bit-Konvertierung",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  
  ImageGadget(1, 0, 0, 800, 600, ImageID(original)) 
  MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
  
  konvertiere24nach32(original)
  
  SetGadgetState(1, ImageID(original)) 
  MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
  
  konvertiere32nach24(original)
  
  SetGadgetState(1, ImageID(original)) 
  MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))

  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
      
  Until Quit = 1

  CloseWindow(0)

  EndIf

End
Danke für die schnelle Hilfe!!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von ts-soft »

Noch ein letzter unwichtiger Tipp: Innerhalb von Proceduren ist Protected die bessere Wahl, Define für ausserhalb
von Proceduren.
Den Satz zum MainLoop kann ich mir sparen, im endgültigem Code sieht es ja korrekt aus :wink:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: StartDrawing() mit und ohne Debugger unterschiedlich?

Beitrag von Danilo »

fabulouspaul hat geschrieben:So sieht's jetzt mit allen Änderungen aus:

Code: Alles auswählen

EnableExplicit
[...]
    org_output = ImageOutput(bildnummer)
    If StartDrawing(org_output)
        *org_adr.pixel24 = DrawingBuffer()
        org_zeilenlaenge = DrawingBufferPitch()
        org_hoehe = ImageHeight(bildnummer)
        org_breite = ImageWidth(bildnummer)
      StopDrawing()
    Else
[...]
    For i = 1 To org_hoehe
      k = org_zeilenlaenge
      l = kopie_zeilenlaenge
      For j = 1 To org_breite
        *kopie_adr\pix_r = *org_adr\pixel_r
        *kopie_adr\pix_g = *org_adr\pixel_g
        *kopie_adr\pix_b = *org_adr\pixel_b
        *kopie_adr\pix_a = 255
        *kopie_adr + 4
        *org_adr + 3
        k - 3
        l - 4
      Next
      *org_adr + k
      *kopie_adr + l
    Next
[...]
Die Adresse, die Du von DrawingBuffer() bekommen hast, nach StopDrawing()
noch weiter zu verwenden, halte ich für problematisch.
StopDrawing() beendet laut Doku die 2DDrawing Operationen und gibt alle
verwendeten Resourcen frei. Somit kann auch dieser Zeiger unter Umständen
nicht mehr gültig sein.

Aber ich denke auch das Du mit DrawImage() bestimmt sicherer
und auch schneller dran bist:

Code: Alles auswählen

EnableExplicit
  
Procedure konvertiere_nach_XX(bildnummer,depth)
    Define kopie

    If IsImage(bildnummer)
        If ImageDepth(bildnummer)=depth
            ProcedureReturn bildnummer
        Else
            kopie = CreateImage(#PB_Any,ImageWidth(bildnummer),ImageHeight(bildnummer),depth)
            If kopie And StartDrawing(ImageOutput(kopie))
                DrawImage(ImageID(bildnummer),0,0)
                StopDrawing()
                FreeImage(bildnummer)
            Else
                ProcedureReturn 0
            EndIf
        EndIf
    EndIf
    ProcedureReturn kopie
EndProcedure  

Define original, Event, Quit

UseJPEGImageDecoder()

original = LoadImage(#PB_Any,"H:\800x600\Image03.jpg")

If OpenWindow(0, 216, 0, 800, 600, "32<->24 Bit-Konvertierung",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  
  ImageGadget(1, 0, 0, 800, 600, ImageID(original)) 
  MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
  
  original = konvertiere_nach_XX(original,32)
  
  SetGadgetState(1, ImageID(original))
  MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
  
  original = konvertiere_nach_XX(original,24)
  
  SetGadgetState(1, ImageID(original)) 
  MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))

  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
      
  Until Quit = 1

  CloseWindow(0)

  EndIf

End
Jetzt muss natürlich noch ein Überprüfung des Rückgabewertes dieser
Procedure in Deinen Code. ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten