![]() |
sporadische fehler beim rendern von JPG zu BMP
hallo,
folgender Befehl rendert ein JPG zu BMP:
Delphi-Quellcode:
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.
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; ..... 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! |
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. |
Re: sporadische fehler beim rendern von JPG zu BMP
Hi!
ImageX ist eine kommerzielle Komponente. Sie ist sehr mächtig. Hier der Link: ![]() 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.. |
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: |
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 :) |
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 02:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz