Seite 1 von 1

CatchImage Problem (crash)

Verfasst: 12.09.2011 00:26
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


Re: CatchImage Problem (crash)

Verfasst: 12.09.2011 00:44
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.

Re: CatchImage Problem (crash)

Verfasst: 12.09.2011 10:27
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

Re: CatchImage Problem (crash)

Verfasst: 18.10.2011 10:48
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! ;) )