Forum: Mikrocontroller und Digitale Elektronik *.BMP in C einbinden?


von Martinwisi (Gast)


Lesenswert?

Hallo

Wollte mal fragen wie ich mit C am besten *.bmp Dateien einfüge. Im
Speziellen will ich einfach eine 320*200 Pixel (S/W) Datei in den
Flashspeicher mit dem restlichen programmcode schreiben. Das Bild soll
dann auf einem Display ausgegeben werden, welches soweit auch schon
läuft, nur bekomme ich die bmp Datei einfach nicht dazu mit in den
Speicher genommen zu werden.
Ich verwende einen dsPIC mit dem C30 Compiler, aber das müsste ja bei
allen Compilern ziemlich gleich sein.
Also gebt mir bitte Tipps wie ich das realisieren könnte und wie ich
dann am besten auf die Daten zugreifen kann. Vielleicht so wie auf ein
Array? Hilfe!!

Danke!
MfG Martin W

----------------------------------
http://www.sbox.tugraz.at/home/m/martinw

von Tobi (Gast)


Lesenswert?

am besten schreibst du dir ein kleines pc programm, dass den inhalt der
bmp datei ausliest und in ein array deiner wahl reinschreibt.
infos zum bmp format gibts bei google (bmp file format). vielleicht
solltest du die konvertierung aber lieber von einem einfacheren format
machen

von Martinwisi (Gast)


Lesenswert?

Hallo

Was einfacheres als bmp? Was wäre denn da noch einfacher als die
Rohdaten?? ;-)

Naja ein PC Programm das mir das in ein Array reinschreibt, kein
Problem... Aber was fang ich dann mit dem Array an? Ich kann es ja erst
nicht einbinden... ich mein ich könnte es all txt wieder speichern, ok
aber wie binde ich die txt datei ein und greife auf sie zu??

Danke!
MfG Martin W

----------------------------------
http://www.sbox.tugraz.at/home/m/martinw

von Hagen (Gast)


Lesenswert?

" Was einfacheres als bmp? Was wäre denn da noch einfacher als die
Rohdaten?? ;-)"

Jo die Rohdaten wären einfacher als BMP und die Rohdaten könnten schon
so angepasst sein das sie das spezielle Pixelformat der LCD's direkt
unterstützen. BMP Files haben einen Header und sind somit keine
Rohdaten, auch wenn dieser Header wirklich einfach aufgebaut ist.

Gruß Hagen

von Martinwisi (Gast)


Lesenswert?

Ja bitte ich mein das sind vorne ein paar Zeichen weiß jetzt nicht genau
wie viele und dann sind nurmehr die Rohdaten... Viel einfacher wirds
nicht gehen, aber der Header ist ja eh nicht das Problem...

Danke!
MfG Martin W

----------------------------------
http://www.sbox.tugraz.at/home/m/martinw

von Tobi (Gast)


Lesenswert?

"Ich kann es ja erst nicht einbinden"

warum nicht? du musst das programm nur so machen, dass es dir ein
fertiges 2-dimensionales array in eine datei schreibt. die datei
bindest du dann in deine sourcen ein und fertig.
zur benutzung einfach das array durchlaufen.
da fällt mir gerad ein, du solltest auch noch x und y ausdehnung mit in
die erzeugte datei speichern

von Martinwisi (Gast)


Lesenswert?

Also ich soll ein C Programm schreiben, welches aus der BMP-Datei
ausliest, den Header weglöscht, und dann in ein Array die Daten
einliest. Am besten dynamisch, kann ich aber nur mit C++... Und dann
soll ich die Daten wieder einzeln auslesen und in eine Textdatei
schreiben?
Und wie binde ich die im C30 Compiler dann ein? Und wie greife ich
drauf zu? Konkretes Beispiel, ich habe sowas noch nie gemacht, nur aus
Datein ausgelesen, aber so ein µC hat ja kein Dateisystem ;-)


Danke!
MfG Martin W

----------------------------------
http://www.sbox.tugraz.at/home/m/martinw

von Tobi (Gast)


Lesenswert?

nein, wir reden noch immer aneinander vorbei :)

du machst dir eine header datei mit einem grossen array drin (ein
wirkliches array, wie es so in c halt aussieht). in dieses array
schreibst du die einzelnen bilddaten. diesen header bindest du dann in
dein uC programm ein und kannst das array ganz normal über seinen namen
ansprechen.

z.b
unsinged int[320][200] =
{ {p_11, p_12, p_13...
  {p_21, p_22....

wobei p_xx der bildpunkt an der stelle xx ist

von Martinwisi (Gast)


Lesenswert?

Ahh langsam schnall ichs! Also das Programm soll mir so ein Array in die
Textdatei schreiben welches dann so wie dein Beispiel aussieht. Diesen
Text kopiere ich dann in eine Headerdatei und diese binde ich mit
#include im Hauptprogramm ein. Und dann kann ich einfach drauf
zugreifen. Brauch ich wahrscheinlich noch ein extern oder sowas...
Und das ganze liegt dann auch sicher im Flashspeicher und in
effizienter Form. Also in meinem Fall unsigned char da ich immer ein
Byte an das Display senden will...

Ich glaub jetzt hab ichs kapiert! Danke!

MfG Martin W

----------------------------------
http://www.sbox.tugraz.at/home/m/martinw

von Rufus T. Firefly (Gast)


Lesenswert?

Für den BASIC-Compiler FastAVR gibt es ein kostenloses Tool namens
FastLCD, das BMP-Dateien in einen hexdump konvertiert.

'/////////////////////////////////////////////////////////////////////// 
////////
bla = 128, 8,  ' Image Table Name, Xbytes, N of Lines, 1026 bytes
&h00,&h00,&h00,&h00,&h00, (....)


Den kann man sicherlich leicht in eine von einem C-Compiler verdaubare
Form bekommen.

von Sebastian (Gast)


Lesenswert?

speicher das teil mit paint als 1 bit grafik ab. dann guckst du dir mit
nem hexeditor (oder ultra edit) das ding an und kopierst dann die
zeilen in dein array... mußt halt das ganze mit irgendwas bearbeiten um
z.B die blanks mit
", 0x" zu ersetzten.
die einzelnen zeilen kann man denke ich mal einfach auszählen und so
kannst du dann das  array dann füllen. so kannst auch sehen das der
header bis zu adresse 3d  geht (oder 61 bytes lang ist)

von Martinwisi (Gast)


Lesenswert?

Hallo

Also so weit funktioniert das! Hab nur noch ein kleines Problem mit dem
Programm, welches mir das Array erstellt. Und zwar, dass es manchmal
Zeichen auslässt. Wahrscheinlich weil es Backspace ausgibt, und dann
ein Zeichen wieder gelöscht wird...

Hier mal der Code beim Einlesen:
Bild[Spalte][Zeile] = unsigned char(Zeichen[0]);

Und beim Ausgeben:
ofs<<setfill('0')<<setw(2)<<hex<<uppercase<<unsigned
int(Bild[Spalte][Zeile] & 0xFF);

Das ganze ist natürlich ein einer Schleife etc. drinnen aber der Fehler
muss irgendwo da liegen! Vielleit weiß ja jemand wo da der Feher
passiert und wie man ihn umgehen kann!

MfG Martin W

----------------------------------
http://www.sbox.tugraz.at/home/m/martinw

von Tobi (Gast)


Lesenswert?

"Wahrscheinlich weil es Backspace ausgibt, und dann ein Zeichen wieder
gelöscht wird..."

escapen oder als binärdatei schreiben

von Martinwisi (Gast)


Angehängte Dateien:

Lesenswert?

Ok habs jetzt geschafft mit dem kleinen selbstgeschriebenem Programm..

Danke an alle! Beweisfoto mit meiner Freundin drauf wurde angehängt
;-)

MfG Martin W

----------------------------------
http://www.sbox.tugraz.at/home/m/martinw

von Tobi (Gast)


Lesenswert?

sieht doch gut aus... also die quali... :)

von Frank M. (Gast)


Lesenswert?

Menno, keiner hat ihm gesagt, daß man eins der vielen bin2hex-Tools
nehmen kann. Ich konvertiere damit gern *pbm-Dateien. Der Header ist
mehr als super einfach (X-Y-Auflösung, Farbtiefe und das wars fast
schon, siehe google) aufgebaut. paintShop kann in diesem Format s/w
speichern.

Tool gibz z.B. hier: http://www.ulrichradig.de/

Frank :-)

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.