Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Stream Error bei TImage ? (https://www.delphipraxis.net/20222-stream-error-bei-timage.html)

Urba 14. Apr 2004 22:06


Stream Error bei TImage ?
 
Hallo Leute,

Habe folgendes Problem. Alle mit Photoshop 8.0 erstellten BMPs kann ich nicht mehr in die TImage-Kompo laden. Es kommt dann "Stream read error". Konvertiere ich das gleiche Bild allerdings in JPG dann geht es. Woran liegt das ? Hat vielleicht jemand das gleiche Problem und/oder weiss eine Lösung ?

Gruss
Urba

Bernhard Geyer 15. Apr 2004 07:45

Re: Stream Error bei TImage ?
 
1, Wie groß ist das Bild
2, Wurde es wirklich als Windows-Bitmap gespeichert?
3, Wurden evtl. komprimierungen aktiviert (Evtl. gibt es mittlerweile auch bei BMP komprimierungen die Delphi nicht kennt).

Urba 15. Apr 2004 12:08

Re: Stream Error bei TImage ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo nochmal,

Im Anhang ist ein solches Bild das bei mir nicht funktioniert. Ihr könnt es ja auch mal ausprobieren. Also ich weiss ja nicht was ich da falsch machen soll beim speichern. Da mach ich "SaveAs" und als BMP und dann die Farbtiefe ... fertig.

Gruss
Urba

Bernhard Geyer 15. Apr 2004 12:44

Re: Stream Error bei TImage ?
 
Bingo!

In der Datei steht am Anfang: BM8, in einen "konvertierten" Bitmap steht BM6. Und ich denke BM8 ist eine neuere Formatspezifikation mit der Delphi nicht zurecht kommt.

Urba 15. Apr 2004 12:48

Re: Stream Error bei TImage ?
 
uha ... das ist doch mal ein Wort. Könnte man das vielleicht irgendwie umgehen. Die Programme müssten doch auch das alte Format können, oder ?

Bernhard Geyer 15. Apr 2004 15:17

Re: Stream Error bei TImage ?
 
Gute Frage. Dazu müßtest Du dich an den hersteller wenden.

Evtl. wäre auch eine eigen Konvertierungsfunktion möglich (wenn man denn die Formatspezifikation dieses neuen BMP-Typs finden würde)

albrecht.elektronik 20. Okt 2004 11:45

Re: Stream Error bei TImage ?
 
Ich habe auch schon mehrere Bitmaps bekommen, die sich mit Delphi nicht öffnen lassen. In Paint geöffnet, die Attribute Bildgröße modifiziert z.B. von 400x200 auf 400x210 und wieder auf 400x200, abschliesend gespeichert.
Die so erzeugten BMPs liesen sich nun alle unter Delphi öffnen. Ein Vergleich zeigte, dass ersteres in einem betrachteten Fall um zwei Bytes länger war. BM6 und BM8 sind laut Definition nicht etwa zwei BMP-File Versionen, sondern vielmehr ist die Ziffer das LSB der Filelänge!
Der Header eines Bitmap-Files scheint immer 54 Bytes groß zu sein (bin keine BMP-Spezifikation-Spezialist) gefolgt von den Bilddaten (Höhe x Breite x Farbtiefe). Das nicht funktionierende File war 2 bytes größer als nach dieser Rechnung, diese Größe war jedoch korrekt im Header eingetragen.
Mit diesem Unterschied scheint die Delphi-BMP-Leseroutine ihr Problem zu haben! Hat jemand schon eine Lösung gefunden???

Jochen

albrecht.elektronik 20. Okt 2004 14:27

Re: Stream Error bei TImage ?
 
Der Fehler tritt in readBuffer auf, da die Anzahl der gelesenen Bytes < der vorgebenen Bytes ist. Da in meinem Fall zwei sinnlose Bytes am Ende hängen habe ich das Problem damit umgangen, die einzulesende Filegröße neu zu berechnen.
bildhöhe x bildbreite x Farbtiefe (in Bytes) klappt nicht immer! (liegt vielleicht an Farbpaletteneinträgen ???)
Was (bisher jedoch für meine Files gut funktioniert hat, war das Runden mit der Farbtiefe biBitCount (-> in Bytes)):

Ich habe in der Graphics.pas folgende Zeilen eingefügt:


5937: BMHandle := CreateDIBSection(DC, BitmapInfo^, DIB_RGB_COLORS, BitsMem, 0, 0);
5938: if (BMHandle = 0) or (BitsMem = nil) then
5939: if GetLastError = 0 then InvalidBitmap else RaiseLastOSError;
5940:
5941: try
neu: with bmiHeader do
neu: begin
neu: if (biBitCount = 8) or (biBitCount = 16) or (biBitCount = 24) or (biBitCount = 32) then
neu: ImageSize := (ImageSize div (biBitCount div 8)) * (biBitCount div 8);
neu: end;
...
Stream.ReadBuffer(BitsMem^, ImageSize);
except
DeleteObject(BMHandle);
raise;
end;

Vielleicht stolpert hier ja mal ein BMP-profi rein, der von der BMP-Größenberechnung mehr Ahnung hat!

Jochen


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