AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi sporadische fehler beim rendern von JPG zu BMP
Thema durchsuchen
Ansicht
Themen-Optionen

sporadische fehler beim rendern von JPG zu BMP

Ein Thema von sieppl · begonnen am 10. Sep 2004 · letzter Beitrag vom 7. Mär 2005
Antwort Antwort
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#1

sporadische fehler beim rendern von JPG zu BMP

  Alt 10. Sep 2004, 20:43
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!
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: sporadische fehler beim rendern von JPG zu BMP

  Alt 11. Sep 2004, 01:27
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#3

Re: sporadische fehler beim rendern von JPG zu BMP

  Alt 11. Sep 2004, 11:51
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.
Vielleicht gibt es noch mehr Stimmen zu diesem Thema..
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#4

Re: sporadische fehler beim rendern von JPG zu BMP

  Alt 11. Sep 2004, 17:15
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.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: sporadische fehler beim rendern von JPG zu BMP

  Alt 11. Sep 2004, 18:18
Ja herzlichen Glückwunsch!

Schade dass ImageX kommerziell ist... und sauteuer dazu. Dann kann das ja offenbar in nem Thread... naja
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: sporadische fehler beim rendern von JPG zu BMP

  Alt 7. Mär 2005, 21:48
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 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