Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi sporadische fehler beim rendern von JPG zu BMP (https://www.delphipraxis.net/29548-sporadische-fehler-beim-rendern-von-jpg-zu-bmp.html)

sieppl 10. Sep 2004 19:43


sporadische fehler beim rendern von JPG zu BMP
 
hallo,

folgender Befehl rendert ein JPG zu BMP:
Delphi-Quellcode:
    Bitmap := TBitmap.Create;
    try
      Bitmap.Width := ThumbnailSize;
      Bitmap.Height := ThumbnailSize;
      Bitmap.Canvas.Brush.Color := clWhite;
      Bitmap.Canvas.FillRect(Bitmap.Canvas.ClipRect);
      Dummy := nil;
      ImageX.Render.Image(Bitmap.Canvas.Handle, Dummy,
        0, 0, ImageX.Image.Width, ImageX.Image.Height,
        OffsetX, OffsetY, ImageX.Image.Width, ImageX.Image.Height,
        ixroSrcCopy, False);
      Bitmap.SaveToFile('c:\temp\test\' + TListItemData(FListView.Items[I].Data).FFileName);
      // Clean-up ImgX control
      ImageX.Images.Clear('');
      ImageX.ConserveMemory;
.....
Das Ganze läuft in einem Thread! Jetzt tritt sporadisch der Fehler auf, dass das Bitmap entweder komplett weiß oder schwarz ist. Dieser Code läuft außerhalb von THreads fehlerfrei.
Es scheint etwas mit dem Handle zum Canvas des Bitmaps zu tun haben.
Ich weiß, dass ImageX non-standard ist, aber vielleicht weiß doch jemand Rat.
Vielen Dank!

dizzy 11. Sep 2004 00:27

Re: sporadische fehler beim rendern von JPG zu BMP
 
Was ist denn bitte "ImageX"?? Eine Kompo? Konnte keine finden...

Ich hatte vor laaanger Zeit auch schon arge Probleme mit der "JPEG.pas" in Threads, mit dem Ergebnis, dass es einfach nicht ging. Dann hatte ich es mal irgendwie anders probiert, mit einer API glaube ich (weiss net mehr genau), und da trat das selbe Problem auf. Jpegs und Threads scheinen einfach nicht zusammen zu passen. Ich habe bis Dato auch noch nirgends eine Lösung dafür gefunden - und somit ist mein Bildvergleichsprogramm dass ich zum Vergleichen von > 13.000 Jpegs bauen wollte nichts geworden. Es scheint offenbar niemand sonst jpegs in Threads zu verwenden...
Bei mir war das Problem die Menge der Bilder, bzw. die daraus resultierenden vielen Aufrufe. Ich konnte damals eindeutig TJPEGImage als Problemquelle identifiziren, und habe bisher nichts gefunden um diese Klasse zu umgehen.

Meine Fehlermeldung war: "Nicht ausreichend Speicher für diesen Vorgang", an beliebgen Stellen im Thread, obwohl der Prozess nur ca. 10MB im RAM belegte.
Evtl. gibt es bei dir ein vergleichbares Problem, nur dass dieses ominöse "ImageX" vielleicht die Fehlermeldung unterdrückt, und statt dessen das Bild einfach weiss oder schwarz füllt :? :?:

Fazit: Mit jpegs + Threads scheint es wohl immer Probleme zu geben...


Wenn da wer Ideen hat, ich wäre auch an einer threadsicheren Methode zum lesen/laden von jpegs interessiert... immernoch.

sieppl 11. Sep 2004 10:51

Re: sporadische fehler beim rendern von JPG zu BMP
 
Hi!
ImageX ist eine kommerzielle Komponente. Sie ist sehr mächtig.
Hier der Link: Atalasoft ImageX

Das Problem muss nicht zwangsläufig mit ImageX zusammenhängen, sonst hätte ich hier auch nicht gepostet. :wink:
Vielleicht gibt es noch mehr Stimmen zu diesem Thema..

sieppl 11. Sep 2004 16:15

Re: sporadische fehler beim rendern von JPG zu BMP
 
Wie ich vermutet habe, lag das Problem alleine am Bitmap.Canvas.Handle und dem Einsatz innerhalb eines Threads.
Bitmap.Canvas.Lock vor dem Rendern und .Unlock danach und es klappt wieder super. :dancer: :dancer2::dancer: :dancer2::dancer: :dancer2::dancer: :dancer2:

dizzy 11. Sep 2004 17:18

Re: sporadische fehler beim rendern von JPG zu BMP
 
Ja herzlichen Glückwunsch!

Schade dass ImageX kommerziell ist... und sauteuer dazu. Dann kann das ja offenbar in nem Thread... naja :)

DataCool 7. Mär 2005 20:48

Re: sporadische fehler beim rendern von JPG zu BMP
 
Hi Dizzy,

ich kenne genau Dein Problem, und ich könnte auch die Wände hochgehen, weil ich auf das jpeg angewiesen bin, und habe ca, 2-7 Bilder die Sekunden die als Jpeg angeliefert werden, in nem Thread *grmpf*

Dieser soll dann das Jpeg in ein TImage zeichnen, naja was soll ich sagen, 1000 mal funktionierts, 1001 gemacht und die App hat rauch gemacht *lol*, suche gerade auch ne alternative zu zeichnen,
erst umwandeln in Bitmap und dann direkt auf das Handle einer Form mit WinApi zu zeichen.

Gruß Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz