Forum: FPGA, VHDL & Co. BMP-Bild in VHDL lesen


von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche schon seit langem ein 5x5 BMP-Bild in vhdl zu lesen aber
mein Algorithmus funktioniert nicht richtig. Anbei findet ihr das
originale Bild  mit den BMP-Pixeldaten (beide in hex-Code) und den
Code-Ausschnitt zum Lesen als Anhänge. Ich weiß nicht, was in meinem
Algorithmus falsch ist, aber vielleicht könnt ihr mir sagen, was drin
falsch ist.

Hinweis: Das BMP-Bild ist ein binäres Bild und besteht aus 54 Bytes
Header und 25 Bytes Pixeldaten.

Vielen Dank im voraus und viele Grüße

von Gustl B. (gustl_b)


Lesenswert?

Yann B. schrieb:
> aber
> mein Algorithmus funktioniert nicht richtig.

Ich kann da in deinem VHDL keinen Algorithmus erkennen. Es wird auch 
keine Datei gelesen.

Hänge doch mal die .BMP und die vollständige .VHD an.

von Micha W. (blackxiiv)


Lesenswert?

moin,

ich könnte mich irren, aber soweit ich weiß werden die rohen Bild-Daten 
auf dem Kopf gespeichert. Also sie unterste Reihe steht dann oben und 
umgekehrt. das erste Byte 0x00 ist der Index für den Pixel gefolgt von 4 
Byte Bilddaten (Alpha-Transparent,R,G,B).

grüüßee (:

von Gustl B. (gustl_b)


Lesenswert?

Micha W. schrieb:
> ich könnte mich irren, aber soweit ich weiß werden die rohen Bild-Daten
> auf dem Kopf gespeichert.

Also 0,0 ist wie üblich oben links in der Ecke.

von Micha W. (blackxiiv)


Lesenswert?

Gustl B. schrieb:
> Micha W. schrieb:
>> ich könnte mich irren, aber soweit ich weiß werden die rohen Bild-Daten
>> auf dem Kopf gespeichert.
>
> Also 0,0 ist wie üblich oben links in der Ecke.

Okay, das Bild steht von den Zeilen aus gesehen auf dem Kopf. Also Daten 
von links nach rechts sind i.O. aber die oberste Zeile steht unten und 
die zweite als Vorletzte usw.

Und was ich jetzt erst sehe... Die Pixeldaten beschreiben ein Bild von 
nur 1x5 Pixeln.

: Bearbeitet durch User
von Gustl B. (gustl_b)


Lesenswert?

Exakt. So ist das wirklich üblich. Ich weiß zwar nicht wieso, aber 
vermutlich vom klassischen Fernseher. Da wird das Bild von links nach 
rechts und von oben nach unten aufgebaut. Das erste Pixel ist also links 
oben. Bei VGA und dann auch bei den anderen Nachfolgern ist das genauso.

Das hat man dann auch für Bildformate übernommen und sogar 
Layoutsoftware macht das so. In Indesign ist die Ecke links oben vom 
"Papier" bei 0,0.

Micha W. schrieb:
> Die Pixeldaten beschreiben ein Bild von nur 1x5 Pixeln

Wieso?

: Bearbeitet durch User
von Micha W. (blackxiiv)


Lesenswert?

Gustl B. schrieb:
> Micha W. schrieb:
>> Die Pixeldaten beschreiben ein Bild von nur 1x5 Pixeln
>
> Wieso?

Weil das 5x5 Byte sind - ich gehe von einem 32Bit-Bitmap aus.
1. Byte Index der Zeile - 2. Byte Alpha - 3./4./5. Byte R/G/B. Das ist 1 
Pixel.
5 Zeilen - also 1x5 Pixel.

Selbst wenn es ein 1 Bit-Bitmap ist so besteht jeder Pixel mit einem 
0-basiertem Index. Und das ist bei 0xFF wohl nicht der Fall :/

An den TO:
Schau Dir mal den Header deiner BMP an und guck, wie das BMP formatiert 
ist. Da gibt es einiges zu beachten.
https://de.wikipedia.org/wiki/Windows_Bitmap#Vor-_und_Nachteile

grüüßee (:

: Bearbeitet durch User
von Yann B. (yann)


Lesenswert?

Gustl B. schrieb:
> Ich kann da in deinem VHDL keinen Algorithmus erkennen. Es wird auch
> keine Datei gelesen.
Mit dem Algorithmus meine einfach das Iterationsverfahren über (i,j), um 
die Lese-Adressen zu erzeugen.
> Hänge doch mal die .BMP und die vollständige .VHD an.
Unwichtig, weil das zu lesende Bild genau wie angehängt aussieht und von 
einem Flash-Speicher gelesen wird.

von Yann B. (yann)


Lesenswert?

Micha W. schrieb:
> ich könnte mich irren, aber soweit ich weiß werden die rohen Bild-Daten
> auf dem Kopf gespeichert. Also sie unterste Reihe steht dann oben und
> umgekehrt. das erste Byte 0x00 ist der Index für den Pixel gefolgt von 4
> Byte Bilddaten (Alpha-Transparent,R,G,B).

So sieht doch das angehängte (unten stehende) Bild (BMP-Pixeldaten) aus. 
Ich habe mir einfach den Header gespart aber wie du siehst, fangen die 
Pixeldaten ab Index 54 an.

Was die Farbkomponenten (R,G,B) angeht, habe ich nicht für jedes Pixel 
das entsprechende Byte im Bild eingetragen, weil es um ein binäres Bild 
angeht, spricht R=G=B.

: Bearbeitet durch User
von Yann B. (yann)


Lesenswert?

Micha W. schrieb:
> Und was ich jetzt erst sehe... Die Pixeldaten beschreiben ein Bild von
> nur 1x5 Pixeln.

Wo siehst du das?

von Mark H. (kehafu)


Lesenswert?

Guck dir doch mal an: https://github.com/FoxExe/Image2Bitmap
Evtl. hilft das.

von WOKO (Gast)


Angehängte Dateien:

Lesenswert?

was ich öfters ein und ausgelesen hab, ist ein GPM Bild. Das ist einfach 
mit Irfanview anzuzeigen bzw abzuspeichern

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

WOKO schrieb:
> was ich öfters ein und ausgelesen hab, ist ein GPM Bild. Das ist einfach
> mit Irfanview anzuzeigen bzw abzuspeichern

Nutze ich auch gern das Format, dann hat man den 8bit Aerger auch nicht. 
Ein Code Beispiel zur Inspiration findet sich hier:

https://gitlab.com/Elpra/drever-framework/drever/-/blob/master/src/drever/vhdl/data_handlers/image_data_pkg.vhd

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.