CatchImage Problem (crash)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Lupo
Beiträge: 147
Registriert: 16.02.2005 15:15

CatchImage Problem (crash)

Beitrag von Lupo »

Hallo,

ich hab ein Problem mit CatchImage().

Mein Programm holt Bilder aus unserer Fotoclub Datenbank mit GetDatabaseBlob() und dann wird das Bild mit CatchImage() geladen, verkleinert und vorerst als thumb angezeigt.
Wir haben jpg und tiff und png Bilder in der DB.

Geht alles solange das image in der DB ok ist. Jetzt ists aber passiert, dass wer kaputte Bilder von einer billigen Speicherkarte in die DB geladen hat. Sollte beim runterladen eigentlich nix machen, weil wenn Catchimage() ein kaputtes Bild bekommt, dann gibts ja #false als return.

Das geht aber nicht immer!!

ok ist es nur bei UseJPGImageDecoder() ODER nur UseTIFFImageDecoder()

aber wenn man beide verwendet, dann crasht das CatchImage().
Witzig ist auch, dass UseTIFFImageDecoder() vor UseJPEGImageDecoder() stehen muss, damit es crasht. Umgekehrt gehts.
Alle anderen Decoder sind egal, wo sie stehen.

Irgendwas ist da faul oder mach ich was falsch, es sollte doch egal sein, welcher Decoder an erster Stelle im Programmcode steht?
Wär super wenn jemand das Codeschnippsel ausprobieren könnte :)

Code: Alles auswählen

; Tested with PB4.51, 4.6Beta, WinXP-SP3, Win7 32 Bit
;-----------------------------------------------------------------
; not ok
UseTIFFImageDecoder()
UseJPEGImageDecoder()

;-----------------------------------------------------------------
;; ok
;UseJPEGImageDecoder()   
;UseTIFFImageDecoder()

;-----------------------------------------------------------------
;; ok
;UseTIFFImageDecoder()

;-----------------------------------------------------------------
;; ok
;UseTIFFImageDecoder()
;UseJPEG2000ImageDecoder()


len = 1000000
*buffer = AllocateMemory(len)

If *buffer
  ; an dieser Stelle wird *buffer mit GetDatabaseBlob() gefüllt.
  ; wir simulieren einen fehlerhaften Eintrag
  PokeS(*buffer, "badpicture", 10)

  If CatchImage(1, *buffer, len)
     FreeImage(1)
  Else  
     Debug "load error"
  EndIf   

  FreeMemory(*buffer)  

EndIf 
End

Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CatchImage Problem (crash)

Beitrag von STARGÅTE »

Den Absturz kann ich bestätigen.

Ist echt komisch, dass es von der Reihenfolge von UseImageDecoder() abhängt.
Das bedeutet, PB nimmt sich anscheint die Quelle und geht dann wie in einer Liste die Decoder durch, welcher passt.

Fragt sich jetzt nur, warum er genau bei dieser Reihenfolge abstürzt.
An einem Fehlerhaften Decoder liegt anscheind nicht, da ja beide einzeln funktionieren.

Meine Vermutung ist, dass beim durchgehen der Decoder, vergessen wird die max-Length weiterzugeben.

Trotzdem sehr seltsam.
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
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: CatchImage Problem (crash)

Beitrag von c4s »

Kann ich ebenfalls bestätigen. Ich erinnere mich ein ähnliches Problem vor Jahren(?) gehabt zu haben, bei dem die Reihenfolge der Decoder scheinbar ebenfalls ausschlaggebend war. Vielleicht waren es sogar die Audio-Decoder... ich weiß es nicht mehr.

Wie dem auch sei. Ich habe es mal im englischen Bugforum gepostet: http://www.purebasic.fr/english/viewtop ... =4&t=47527
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: CatchImage Problem (crash)

Beitrag von c4s »

Habe es gerade getestet: Mit PureBasic 4.60 RC 2 wurde der Fehler behoben.

(Also: immer Fehlermeldungen machen, sonst wäre das eventuell untergegangen! ;) )
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Antworten