Einzelnen Beitrag anzeigen

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