AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Stream Error bei TImage ?
Thema durchsuchen
Ansicht
Themen-Optionen

Stream Error bei TImage ?

Ein Thema von Urba · begonnen am 14. Apr 2004 · letzter Beitrag vom 20. Okt 2004
Antwort Antwort
Urba

Registriert seit: 8. Dez 2002
Ort: Ketsch
120 Beiträge
 
Delphi 6 Personal
 
#1

Stream Error bei TImage ?

  Alt 14. Apr 2004, 23:06
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
Es gibt keine blöden Fragen, nur blöde Antworten
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Stream Error bei TImage ?

  Alt 15. Apr 2004, 08:45
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).
  Mit Zitat antworten Zitat
Urba

Registriert seit: 8. Dez 2002
Ort: Ketsch
120 Beiträge
 
Delphi 6 Personal
 
#3

Re: Stream Error bei TImage ?

  Alt 15. Apr 2004, 13:08
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
Angehängte Dateien
Dateityp: zip bild.zip (94,4 KB, 21x aufgerufen)
Es gibt keine blöden Fragen, nur blöde Antworten
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Stream Error bei TImage ?

  Alt 15. Apr 2004, 13:44
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.
  Mit Zitat antworten Zitat
Urba

Registriert seit: 8. Dez 2002
Ort: Ketsch
120 Beiträge
 
Delphi 6 Personal
 
#5

Re: Stream Error bei TImage ?

  Alt 15. Apr 2004, 13:48
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 ?
Es gibt keine blöden Fragen, nur blöde Antworten
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Stream Error bei TImage ?

  Alt 15. Apr 2004, 16:17
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)
  Mit Zitat antworten Zitat
albrecht.elektronik

Registriert seit: 20. Okt 2004
Ort: Schwabach
2 Beiträge
 
#7

Re: Stream Error bei TImage ?

  Alt 20. Okt 2004, 12:45
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
  Mit Zitat antworten Zitat
albrecht.elektronik

Registriert seit: 20. Okt 2004
Ort: Schwabach
2 Beiträge
 
#8

Re: Stream Error bei TImage ?

  Alt 20. Okt 2004, 15:27
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
  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 04: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