Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [GR32] EInvalidGraphic "Bitmap ist ungültig", warum? (https://www.delphipraxis.net/146702-%5Bgr32%5D-einvalidgraphic-bitmap-ist-ungueltig-warum.html)

OG Karotte 25. Jan 2010 19:25


[GR32] EInvalidGraphic "Bitmap ist ungültig", waru
 
Hallo zusammen,

ich lese ein JPEG-Bild aus einer Datei ein und möchte es mittels TImageView32 aus der Graphics32-Bibliothek anzeigen (und später mal weiter bearbeiten).

Das Einlesen funktioniert problemlos nur das Zuweisen klappt nicht.

Für das Zuweisen nutze ich folgenden Code:

Delphi-Quellcode:
jp := TMemoryStream.Create;
fs.Seek(ANodeData.JPEGOffset, soFromBeginning);
jp.CopyFrom(fs, ANodeData.JPEGLength);
jp.Seek(0, soFromBeginning);
imgSource.Bitmap.LoadFromStream(jp); //<-- hier erscheint der Fehler EInvalidGraphic 'Bitmap ist ungültig'
Ergänze ich folgende Zeile (nach dem 'seek')
Delphi-Quellcode:
jp.SaveToFile('test1.jpg');
und lade das Bild dann so:
Delphi-Quellcode:
imgSource.Bitmap.LoadFromFile('Test.jpg');
wird die letzte Zeile problemlos abgearbeitet und das Bild korrekt angezeigt.

Was mach' ich falsch ? :cry:

turboPASCAL 25. Jan 2010 21:54

Re: [GR32] EInvalidGraphic "Bitmap ist ungültig",
 
Du lädst eine Jpeg-Datei in ein Bitmap ?
Klar dass das dann kracht. Wandele erst das Jpeg in ein Bitmap, wie das geht solltest du im Forum finden können.

OG Karotte 25. Jan 2010 21:59

Re: [GR32] EInvalidGraphic "Bitmap ist ungültig",
 
Ok, hab es selbst gefunden:

In den Streamroutinen von TBitmap32 wird ein TBitmap-Objekt genutzt, während in den Fileroutinen ein TPicture-Objekt genutzt wird.
Da das TBitmap auch eine Bitmap und nicht ein JPEG erwartet kam es wohl zu dem Fehler. Dumm nur das in der Doku von TPicture gesprochen wird :wall:

Ich hab' nun noch ein Jpeg hinzugefügt und dies dann an das ImageView32 übergeben:

Delphi-Quellcode:
fs.Seek(ANodeData.JPEGOffset, soFromBeginning); // Daten aus Datei lesen
ms := TMemoryStream.Create; // Memorystream erzeugen
ms.CopyFrom(fs, ANodeData.JPEGLength); // Mit den Daten aus der Datei füllen
ms.Seek(0, soFromBeginning); // Zeiger auf erste Position zurücksetzen
jp := TJPEGImage.Create; // JPEG erzeugen
jp.LoadFromStream(ms); // Mit Daten aus Stream füllen
imgSource.Bitmap.Assign(jp); // an ImageView32 übergeben

OG Karotte 25. Jan 2010 22:02

Re: [GR32] EInvalidGraphic "Bitmap ist ungültig",
 
@turboPASCAL: Das direkte Laden des jpg als Datei funzte ja, nur nicht das Laden aus dem Stream (s.o.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 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