Forum: Mikrocontroller und Digitale Elektronik Bitmap auf LCD - Bytes pro Zeile


von TK (Gast)


Lesenswert?

Hi,

ich habe ein Grafik Display 128x64Pixel 4Bit Farbtiefe auf dem ich 
Bitmaps von einer SD Karte darstellen möchte.

Für einen ersten Test habe ich ein Bild auf 128x64 Pixel und 4Bit Farbe 
konvertiert und auf der SD Karte abgespeichert.
Mit meinem uC lese ich die Datei, schneide den Header weg und schiebe 
die restlichen Daten an mein Display. Das Bild wird korrekt dargestellt.

Nun habe ich ein anderes Bild mit 50x49 Pixel getestet. Hier muss ich 
nach jeder Zeile 3Byte wegschmeißen damit es korrekt dargestellt wird.

Die Breite des Bitmaps (in Pixel) kann ich aus dem Header entnehmen.
Da steht 50 drin. Also habe ich 50X4Bit = 25Bytes pro Zeile ausgegeben 
was schiefgeht. Sobald ich pro Zeile 25Bytes ausgebe und 3Byte 
wegschmeiße funktioniert es.

wie komme ich an die Information der 3 Dummy Bytes pro Zeile??

Gruß

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

TK schrieb:
> Die Breite des Bitmaps (in Pixel) kann ich aus dem Header entnehmen.
> Da steht 50 drin.

Da steht aber auch mehr drin, nämlich wieviele Bytes eine "scanline" 
lang ist. Und das ist die für Dich interessante Zahl.

von TK (Gast)


Lesenswert?

>Da steht aber auch mehr drin, nämlich wieviele Bytes eine "scanline"
>lang ist. Und das ist die für Dich interessante Zahl.
Das hört sich gut an ... welchen Offset hat diese "Scanline" im Header 
??

http://de.wikipedia.org/wiki/Windows_Bitmap

von Karl H. (kbuchegg)


Lesenswert?

Da hast du schon recht. In einem BMP steht das nicht drinnen, das muss 
man wissen. (Interessant, dass das im Wiki-Artikel nicht dokumentiert 
ist)
Die tatsächlich gespeicherte Anzahl an Bytes pro Zeile, ist bei einer 
BMP Datei immer ein Vielfaches von 4.

25 ist kein Vielfaches von 4, das nächst höhere ist 28. d.h. eine 
Bildzeile besteht aus 28 Bytes, von denen aber nur die ersten 25 
relevant sind.

Musst du dir eben aus der Byte-Zahl ausrechnen, wieviele Bytes nach 
jeder Bildzeile zu überspringen sind.

: Bearbeitet durch User
von TK (Gast)


Lesenswert?

Super, vielen Dank

von innerand i. (innerand)


Lesenswert?

Karl Heinz schrieb:
> (Interessant, dass das im Wiki-Artikel nicht dokumentiert
> ist)

Bitte ergänzen :)

von Dominic A. (neo123)


Lesenswert?

Es steht doch da im Kapitel Bilddaten:
Zitat:" Die Länge jeder Zeile ist ein Vielfaches von 4 Bytes, falls 
erforderlich, wird mit Nullbytes aufgefüllt."

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

innerand innerand schrieb:
> Karl Heinz schrieb:
>> (Interessant, dass das im Wiki-Artikel nicht dokumentiert
>> ist)
>
> Bitte ergänzen :)


Habs überlesen.
Hier ...
1
Bilddaten[Bearbeiten]
2
Die Bilddaten beginnen am Offset bfOffBits. Die Größe der Bilddaten
3
beträgt biWidth×biHeight×biBitCount/8 wenn biCompression=BI_RGB,
4
ansonsten biSizeImage.
5
6
Die Bilddaten werden Zeile für Zeile gespeichert. Wenn biHeight positiv
7
ist, beginnen die Bilddaten mit der letzten und enden mit der ersten
8
Bildzeile, ansonsten ist es umgekehrt. Die Länge jeder Zeile ist ein
9
Vielfaches von 4 Bytes, falls erforderlich, wird mit Nullbytes aufgefüllt.
... steht es ja.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.