HEX-Datei in Bitmap wandeln

OP #616019
Lesenswert?

Hallo,

ich habe eine Hardcopy von meinem Grafikdisplay mit dem Prozessor 
generiert und sende diese über die RS232-Schnittstelle. Die Daten sind 
schon so aufbereitet, daß diese dem Bitmap-Format entsprechen. Ich 
benötige nun ein Programm, das die RS232-Daten empfängt und die Daten 
als BMP-Datei speichert.

Bisher habe ich zwar eine Lösung für dieses Problem, aber das Ganze ist 
recht umständlich:

Ich benutze das Programm Bintherm, um die Daten der RS232-Schnittstelle 
aufzuzeichnen. Die Zeichen stelle ich in HEX dar und kopiere diese dann 
in die Zwischenablage (siehe angehängte Datei).

Als zweiten Schritt nehme ich den HEX-Editor "Hex-Editor MX" und kopiere 
da den Inhalt der Zwischenablage rein. Danach wird die Datei 
gespeichert.

Kennt jemand ein entsprechendes Programm, wo das einfacher geht?

Gruß
Martin
Angehängte Dateien:
Gast #616027
Lesenswert?

Wenn ich Dich recht verstehe, kommt über die Rs232 schon eine komplette 
Datei rein? Du must also "nur" die Daten in eine Datei schreiben? Geht 
das nicht mit so jedem Terminal-Program ("Datei empfangen"). Du könntest 
auch mal ein simples "copy com1 bitmap.bmp /B" vesuchen (wenn Dein 
letztes gesendetes Zeichen ein EOF  bzw. EOT (ASCII-Zeichen hab ich 
nicht im Kopf)
OP #616032
Lesenswert?

@Micha:
Ja, die Daten müssen nur noch gespeichert werden. Die kommen schon so 
komplett vom Prozessor. Am PC ist keine Datenwandlung erforderlich.

Bei Windows XP gibt es zwar das Hyperterminal, aber damit bin ich nicht 
klar gekommen. Ich weiß nicht, ob das überhaupt mit diesem gehen könnte.

Wie soll das mit "copy com1 bitmap.bmp /B" gehen?
Gast #616041
Lesenswert?

> Der BMP-Header ist schon in den Daten vom Prozessor enthalten. Es gibt
> nur ein Problem, das ganze auf der PC-Seite zu empfangen und 1:1 zu
> speichern...
ach so...
na, dann könntest du die daten byteweise einlesen, auf dem pc den header 
interpretieren und dann weisst du ja, wieviele bytes noch kommen. du 
müsstest allerdings ein kleines progrämmchen für den pc schreiben, das 
ist aber trivial.
...oder du packst um das ganze noch ein protokoll, ähnlich diesem hier: 
http://en.wikipedia.org/wiki/Type-length-value dann könntest du auch 
noch andere objekte, ausser BMP's senden.
:-)
OP #616048
Lesenswert?

Peter wrote:
> du
> müsstest allerdings ein kleines progrämmchen für den pc schreiben, das
> ist aber trivial.

... das möchte ich vermeiden, denn mit Dateihandling auf dem PC bin ich 
nicht so fit. Ich programmiere nicht so oft. Und wenn, dann nur 
Controller. Ich bin froh, daß das mit der Hardcopy-Funktion im ATMega128 
inkl. Einarbeitung in das Bitmap-Thema in einem Tag geklappt hat....

Gibt es denn nicht ein Terminalprogramm, das empfangene Daten 
"vernünftig" speichern kann?
Gast #616070
Lesenswert?

> Wie soll das mit "copy com1 bitmap.bmp /B" gehen?

Falls Du Windows bzw. MS-Dois benutzt: Du machst ein Dos-Fenster auf 
(Start --> Ausführen --> "cmd" bzw. Windows-Taste & "R" --> "cmd"). Dann 
gibst Du die Befehlszeile ein und startest den Transfer vom µC. Unter 
den meisten Betriebssystemen kann man die Schnittstellen als Datei 
ansprechen. "com1" ist die erste serielle Schnittstelle, "com2" die 
zweite ("lpt1" entsprechned die parallele, "con" die Konsole also 
Tastatur). Die Befehlszeile kopiert also die Datei von der angegeben 
Stelle in die neue Datei. Der Schalter "/B" bedeutet, das binär-Dateien 
kopiert werden sollen.
OP #616088
Lesenswert?

@Kai F.
Vielen Dank für das Programm. Funktioniert super!

Ich habe bisher noch nie was für Windows programmiert. Habe nur vor ca. 
8 Jahren ein paar kleine DOS-Programme geschrieben (unter C, C verwende 
ich nun auch für den AVR). Mich würde mal interessieren, wie der 
Quellcode für das Programm aussieht. Was für eine Programmiersprache 
verwendest Du? Visual Basic? Ich bin am überlegen, ob ich auch mal ein 
paar kleine Programme selber schreiben soll.

Welche Programmiersprache zur Windows-Programmerstellung ist einfach zu 
erlernen? Und wieviel kostet ein Compiler hierfür?

Gruß
Martin
OP #616094
Lesenswert?

Simon Küppers wrote:
> Du hast vermutlich keine DOS-Programme geschrieben, sondern
> Konsolenprogramme... Was hindert dich daran sowas nochmal zu tun? ;)

EXE-Dateien waren das damals.....
Zum einen müßte ich den C-Compiler erst mal installieren (hab nur uralte 
Disketten und mein aktueller PC hat kein Diskettenlaufwerk mehr). Zum 
anderen sehen Windows-Programme schöner aus g. Das hat mich schon 
immer gereizt, so was mal selber zu machen.
Gast #616096
Lesenswert?

> Welche Programmiersprache zur Windows-Programmerstellung ist einfach zu
> erlernen? Und wieviel kostet ein Compiler hierfür?

wenn du schon C kannst: es gibt viele freie C-compiler für windoofs, 
z.b. MSVC express edition, diverse borland compiler, den watcom, 
pelles-C, LCC-Win32 usw.
zur not tuts auch ein GCC (mingw).

für GUI anwendungen könntest du C#/VB/.NET oder Java nehmen. mit C geht 
es zwar auch, ist aber eine ganze ecke komplexer.

kostenlose sprachen wären dann noch Python (auch GUI fähig) und diverse 
BASIC und Pascal implementationen. es gibt verdammt viel kostenloses 
zeug, das kann man alles gar nicht aufzählen.
:-)
#616132
Lesenswert?

Ist in Delphi 5 programmiert. Das nutze ich sehr häufig für so kleine 
Programme, oder wenn es von der Arbeit her so sein soll. Größeres mache 
ich mittlerweile fast nur in C++.

Im Code steckt nicht viel drin, Port öffnen, Datei öffnen und alles was 
am Port reinkommt in die Datei schreiben. Die wichtigste Funktionalität 
steckt in eine COM-Port-Komponente, die das ganze Handling der 
Schnittstelle übernimmt. http://sourceforge.net/projects/comport/

Drum herum ist halt noch etwas Fehlerbehandlung.
OP #616147
Lesenswert?

Ich habe mir nun "Visual C++ 2005 Express Edition" bei Microsoft 
downgeloaded. Ich denke aber, daß man ohne fremde Hilfe bzw. ein gutes 
Buch nicht viel auf die Reihe bekommt. Bisher fehlt mir jeder 
Durchblick, wie das funktioniert....

Kennt jemand ein gutes Buch für Einsteiger von C++?
#616206
Lesenswert?

Martin Müller wrote:
> Ich denke aber, daß man ohne fremde Hilfe bzw. ein gutes
> Buch nicht viel auf die Reihe bekommt.

Schnapp dir doch einfach mal ein paar kleine OpenSource Programme, und 
pass mal ein paar Kleinigkeiten deinen Wünschen an (Menüs verändern oder 
so), sowas find ich super lehrreich.
www.sf.net ist dafür erstmal ne gute Anlaufstelle. -wiebel
Gast #616360
Lesenswert?

ähm, da muss noch der Header der BMP Datei geschrieben werden sonst geht 
da garnix, eine Alternative dazu wäre sicher in Borland C oder in Delphy 
den sogenannten Canvas zu benutzen und einfach den Pixelstrom ( 
sozusagen ein Array ) in das Pixel Array des Canvas zu Transportieren 
...

hab mal vor vielen vielen Jahren einen eigenen PCX Generator 
programmiert der mir Fraktale erzeugt hat ... nunja was ich mich 
erinnern kann waren das so 128 Bytes an Headerinformationen wie Breite 
und Länge des Bildes sowie Farbauflösung und ob es eine Kompression gab 
( PCX is ja im prinzip nur ein BMP nur halt mit 192 Farbwerten 
funktioniert = 0xC0, alles darüber ist die anzahl der Folgenden 
"gleichen" farbinformation )

in borland würde es ca. so funktionieren (nix Quick & Dirty sondern 
Sauber):

for(x=0;x<xmax;x++)
for(y=0;y<ymax;y++)
Canvas.Pixels[x][y] = DatenArrayFromSerial[x+xmax*y];

Canvas.SaveToFile(AnsiString("Display.bmp"));

das Canvas schreibt dir dann völlig automatisch den Header und den 
Abschluss..

lg Jan
OP #1659976
Lesenswert?

Ich benutze das Programm auch sehr gerne. Ich bin dem Programmierer auch 
sehr dafür dankbar.

Es wäre noch gut, wenn der Bytezähler gelöscht würde, wenn man eine neue 
Aufzeichnung startet. Dann würde man gleich anhand der Dateigröße sehen, 
ob die Daten alle angekommen sind (oder man einen Fehler sichen muß).

Anbei ein Bild einer Hardcopy eines Farbdisplays von Electronic 
Assembly. Ich erzeuge mit dem Conroller eine BMP-Datei, die ich zum PC 
schicke. Ich habe diese im Anhang beigefügt (mit PC zuvor als PNG 
gewandelt, da die BMP-Datei 256k hat).

Gruß
Martin
Angehängte Dateien:
#1686575
Lesenswert?

Hatte grad zufällig das Programm selbst einmal verwendet und dacht mir 
ich schaue mal in diesen alten Thread wieder rein.
Tatsächlich gibt es einige Nutzer und ein paar 
Verbesserungsvorschläge/-wünsche.

Hier also einen neue Version mit folgenden Änderungen:
-Einstellungen (Port, Baudrate und Dateiname) werden in der Registry 
gespeichert
-Bytezähler wird zurück gesetzt, wenn einen neue Aufnahme gestarten wird

Ich hoffe, dass es für den Einen oder Anderen jetzt noch etwas 
nützlicher ist.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren