Ich habe den Output der Bmp2C.exe vorliegen, jedoch leider nicht mehr die .bmp Datei mit welcher der Output generiert wurde. Gibt es eine Möglichkeit wie ich den generierten C/C++ Code interpretieren kann? Hier noch ein Beispielblock aus der C/C++ Datei: 0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x82,0x42,0x22,0xf2,0x0e,0x22,0x42,0x82,0x02,0x00,0x00, 0x01,0x00,0x00,0x00, 0x0f,0x00,0x00,0x00,0x00,0x01,0x00,0x00, 0x00,0x38,0x27,0x24,0x24,0x24,0x24,0x24,0x24,0xe4,0x04,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x09,0x09,0x08,0x07,0x00,0x00, Ich freue mich über eine Rückmeldung!
:
Verschoben durch Moderator
doublesobig schrieb: > Gibt es eine Möglichkeit wie ich den generierten C/C++ Code > interpretieren kann? C-Compiler können gut mit C-Code umgehen.
doublesobig schrieb: > Ich habe den Output der Bmp2C.exe vorliegen, jedoch leider nicht mehr > die .bmp Datei mit welcher der Output generiert wurde. Gibt es eine > Möglichkeit wie ich den generierten C/C++ Code interpretieren kann? Du willst also aus dem C Code wieder die anschaubare BMP-Datei machen. Naja, das geht recht einfach, indem man in einem Mini-C Programm die Datei als Binärdaten in eine Datei schreibt. Lad deine C-Datei hier hoch, vielleicht macht das Einer für dich.
doublesobig schrieb: > generierten C/C++ Code Mit welchem Encoding soll das denn C/C++ Code sein? Ich sehe da keinen Code. Guck dir an wie eine BMP aufgebaut ist. Da bringt ein doublesobig schrieb: > Beispielblock ziemlich wenig denn die BMP hat einen Header der steht am Anfang. Oder es muss zumindest definiert sein welche Farbtiefe und welche Auflösung das Bild hat.
Code in einem char-Array definieren. Das Array in eine Datei schreiben (binary mode). Dann mit Irfan-View ansehen. Das kann auch RAW-Bilder lesen. Gustl B. schrieb: > denn die BMP hat einen Header der steht am Anfang. Muss nicht, denn es ist nicht das Windows Paint Dateiformat gemeint.
Dirk B. schrieb: > Windows Paint Dateiformat Wäre mir neu, dass Paint ein eigenes Dateiformat hat. Zumindest die Auflösung, also Zeilenlänge, muss irgendwo stehen.
Ein Beispiel mit dem geposteten Code wäre vollkommen ausreichend für mich. const unsigned char Array[] = { 0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x82,0x42,0x22,0xf2,0x0e,0x22,0x42,0x82,0x02,0x00,0x00, 0x01,0x00,0x00,0x00, 0x0f,0x00,0x00,0x00,0x00,0x01,0x00,0x00, 0x00,0x38,0x27,0x24,0x24,0x24,0x24,0x24,0x24,0xe4,0x04,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x09,0x09,0x08,0x07,0x00,0x00}; Die gesamte Datei ist meiner Meinung nach zu lang, sie besteht auch nur aus diesem Array was bis zum Rand gefüllt ist. Informationen bezüglich Header habe ich nicht. So sehen die Elemente in diesem Array aus. Ich verstehe ehrlich gesagt nicht so recht, was du mit Schreiben im binary mode meinst. Sollte das Ziel dann eine .bin sein, die ich mit IrfanView öffnen kann?
doublesobig schrieb: > Ich verstehe ehrlich gesagt nicht so recht, was du mit Schreiben im > binary mode meinst. Einfach Byte-für-Byte rausschreiben. Dabei keine automagischen Konvertierungen "\n"->"\r\n", UTF8, o.Ä. aktiv haben. d.H. am Schluss hast du eine Datei bei der im ersten Byte 0x30, im zweiten auch 0x30, im dritten 0x00 usw. steht. Das sind deine Pixel-Infos. Dann musst du rausknobeln, wieviele Pixel es in der Breite Sind, und wieviele Bytes pro Pixel gespeichert sind. Das konfigurierst du in einer Bild-Konverter-Software, und schreibst wieder ein BMP oder PNG oder TIFF oder wasauchimmer daraus.
doublesobig schrieb: > Ein Beispiel mit dem geposteten Code wäre vollkommen ausreichend für > mich. Gut, wenn du meinst: Welche Farbtiefe? Mit Welcher Farbe beginnt der Ausschnitt? Mit welcher Pixel und Zeilennummer beginnt der Ausschnitt? Wie lange ist eine Zeile?
Gustl B. schrieb: > Welche Farbtiefe? Mit Welcher Farbe beginnt der Ausschnitt? Mit welcher > Pixel und Zeilennummer beginnt der Ausschnitt? Wie lange ist eine Zeile? Eben deshalb stelle ich ja die Frage hier. Ich erkenne selber nicht den typischen Aufbau einer Bitmap die ja hoffentlich Output der Bmp2C.exe sein sollte.(aus einer Bitmap ist es ja trivial diese Informationen zu entnehmen) Ich weiß eben nicht, wie das alles zu interpretieren ist und wie ich aus den Informationen ein Bild extrahieren kann.
doublesobig schrieb: > Ein Beispiel mit dem geposteten Code wäre vollkommen ausreichend für > mich. bitteschön. test.c kompilieren, ausführen. dann mit imagemagick:
1 | convert -depth 8 -size 8x4 rgb:test.raw result.png |
Dein Quell-Bild war nicht RGB? Hatte keine 24 Bit/Pixel? War nicht 8×4 Pixel groß? Dann stimmt das result.png nicht.
:
Bearbeitet durch User
doublesobig schrieb: > Ich weiß eben nicht, wie das alles zu interpretieren ist und > wie ich aus den Informationen ein Bild extrahieren kann. Dann wären ein paar mehr Informationen hilfreich, z. B. wie viele Bytes sind das insgesamt? Daraus könnte man schonmal recht gut die Auflösung erraten wenn das z. B. 921600 oder 2359296 oder ... sind.
Εrnst B. schrieb: > Dein Quell-Bild war nicht RGB? Hatte keine 24 Bit/Pixel? War nicht 8×4 > Pixel groß? > Dann stimmt das result.png nicht. Danke dir für deine Mühe. Ehrlich gesagt habe ich das Ergebnis nicht erwartet, werde es aber erstmal in ein paar weiteren Fällen betrachten.
Hast du die Bildparameter aus dem Array gewonnen oder war es eine Annahme deiner Seite?
doublesobig schrieb: > Hast du die Bildparameter aus dem Array gewonnen > oder war es eine Annahme deiner Seite? Das war eine Annahme, denn die Chancen stehen gut, dass die Bildparameter in dem Array nicht drinstehen.
doublesobig schrieb: > Annahme deiner Seite? Geraten. 96 Bytes lässt sich ohne Rest durch 3 Teilen, deshalb Annahme RGB, ==> 32 Pixel. 32 Pixel auf ein Rechteck verteilen? 1×32, 2×16 => sind mir zu unförmig deshalb versuch mit 8×4. Schaut aber nicht richtig aus. Also: von vorne, Parameter ändern... Das meine ich mit: Εrnst B. schrieb: > Dann musst du rausknobeln, wieviele Pixel es > in der Breite Sind, und wieviele Bytes pro Pixel gespeichert sind Wenn das BMP2C das nicht irgendwo in einem Kommentar im C-File abgelegt hat.
Ich habe einen Kommentar gefunden, in dem folgende Anmerkungen stehen: // Memorysize: 5376 bytes (12 bytes per Line) // Bitmapsize X:12 Y:3584 // Bits per Pixel:1
Sehr gut! Ohne diesen Kommentar hätte man lange probieren können bis da diese seltsame Auflösung rauskommt. Also ist das Schwarz/Weiß. Aber um aus deinem Ausschnitt ein Bild zu rechnen bräuchte man trotzdem die Position des ersten Bytes, also welche 8 Pixel sind das in einer Zeile? Edit:
1 | [[0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 1. 1.] |
2 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
3 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1.] |
4 | [0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0.] |
5 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
6 | [0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0.] |
7 | [0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0.] |
8 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
9 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
10 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
11 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
12 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
13 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
14 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
15 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
16 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
17 | [0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] |
18 | [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] |
19 | [0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] |
20 | [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] |
21 | [0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] |
22 | [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] |
23 | [0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] |
24 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
25 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
26 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
27 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
28 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
29 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
30 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
31 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
32 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
33 | [0. 0. 0. 0. 0. 0. 1. 0. 1. 0. 0. 0.] |
34 | [0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1. 0.] |
35 | [0. 0. 1. 0. 0. 0. 1. 0. 1. 1. 1. 1.] |
36 | [0. 0. 1. 0. 0. 0. 0. 0. 1. 1. 1. 0.] |
37 | [0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0.] |
38 | [0. 0. 1. 0. 1. 0. 0. 0. 0. 0. 1. 0.] |
39 | [0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] |
40 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
41 | [0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] |
42 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
43 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
44 | [1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0.] |
45 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
46 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
47 | [0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] |
48 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
49 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1.] |
50 | [1. 0. 0. 0. 0. 0. 1. 0. 0. 1. 1. 1.] |
51 | [0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1. 0.] |
52 | [0. 1. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0.] |
53 | [0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1. 0.] |
54 | [0. 1. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0.] |
55 | [1. 1. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0.] |
56 | [0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
57 | [0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] |
58 | [0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1.] |
59 | [0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] |
60 | [0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1.] |
61 | [0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0.] |
62 | [1. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0.] |
63 | [0. 0. 0. 0. 0. 1. 1. 1. 0. 0. 0. 0.] |
64 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] |
65 | [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] |
Allerdings ist bei deinem Ausschnitt an Bytes unklar ob der an einem Zeilenanfang oder irgendwo sonst beginnt.
:
Bearbeitet durch User
Kann man da nicht eine ähnliche Aussage wie Ernst B. treffen? Bei einem Bit pro Pixel und insgesamt 96 Byte könnten es ja z.B. 12 x 8 Byte sein. Es sollte auf jeden Fall ein chinesisches Schriftzeichen ergeben. Bei deinem Ergebnis sieht es fast so aus, als könnte man ein chinesisches Schriftzeichen erlangen, wenn man es in der Länge teilt und die 8 12x8 Blöcke übereinander legt.
Bei 12 Pixeln Breite ist das Bild 1,5 Bytes breit. Man kann viel vermuten. Unklar ist und bleibt wo das erste Byte steht. Ist das im Bild ganz oben links? Dann ist unklar ob das little oder big endian ist. Schön wäre die ganze Bilddaten und nicht nur dieser Ausschnitt. Aber da ja jetzt sowohl Auflösung als auch Farbtiefe bekannt sind kannst du das selber schnell zu einem Bildchen bauen und ausprobieren wenn es auf Anhieb nicht korrekt aussieht.
doublesobig schrieb: > Ich habe einen Kommentar gefunden, in dem folgende Anmerkungen stehen: doublesobig schrieb: > Es sollte auf jeden Fall ein chinesisches Schriftzeichen ergeben. Das ist aber alles schon arg Salami. Gibt es weitere Infos, die Du hast? Z.b. welches Zeichen? Ein Puzzle ohne Randteile ist einfacher, wenn man Infos zum Motiv hat.
Gustl B. schrieb: > Bei 12 Pixeln Breite ist das Bild 1,5 Bytes breit. > > Man kann viel vermuten. Unklar ist und bleibt wo das erste Byte steht. > Ist das im Bild ganz oben links? Laut dem Standard ist das Pixel mit den Koordinaten (0,0) unten links: https://en.wikipedia.org/wiki/BMP_file_format#File_structure
Dann ist das Bild eben punktgespiegelt. Aber egal solange hier nur Fragmente gepostet werden kann man nicht sinnvoll helfen. Bei dem Seitenverhältnis tippe ich auch nicht auf ein Schriftzeichen sondern einen ganzen Zeichensatz.
:
Bearbeitet durch User
Ich kann wie gesagt keine weiteren Infos geben und das Array besteht nur aus vielen weiteren solcher Konstrukte. Deshalb hätte das vollständige Array auch nur wenig Sinn (hat auch ca. 6000 Zeilen). Die Header Informationen scheinen irgendwann verloren gegangen zu sein.Ich habe leider auch keinen Ansprechpartner. Informationen über die Zeichen habe ich nicht. Wird wohl alles der vereinfachte chinesische Zeichensatz sein. Da nicht mit sonderlich viel Weitblick programmiert wurde, ist es eben auch möglich, dass in einem "Block" mehrere Zeichen stehen.
doublesobig schrieb: > ch kann wie gesagt keine weiteren Infos geben und das Array besteht nur > aus vielen weiteren solcher Konstrukte. Deshalb hätte das vollständige > Array auch nur wenig Sinn (hat auch ca. 6000 Zeilen) Wenn es "komisch" formatiert ist, ist es kaum so aus dem Konverter gefallen. Du kannst uns weiter raten lassen oder das File posten. Das sind doch bloß ein paar kB doublesobig schrieb: > Informationen über die Zeichen habe ich nicht. Unwahrscheinlich, dass Dir jemand ein Projekt übergibt und dann sagt, hier ist ein File mit Schriftzeichen. Woher die stammen, wie sie verwendet werden, wo sie angezeigt werden, auf welcher HW das eingesetzt wird, ist unbekannt. doublesobig schrieb: > Da nicht mit sonderlich viel Weitblick programmiert wurde, ist es eben > auch möglich, dass in einem "Block" mehrere Zeichen stehen. Es gibt also auch noch SW drumherum, deren Qualität Du beurteilen kannst? Die vielleicht sogar vorliegt?
Gustl B. schrieb: > Allerdings ist bei deinem Ausschnitt an Bytes unklar ob der an einem > Zeilenanfang oder irgendwo sonst beginnt. Das Muster scheint so aufgebaut, dass die 8Bit jedes Bytes "quer" zu den einzelnen Bytes sind. Als Beispiel, wenn ein Zeichen 12 Spalten a 16 Zeilen ist: Byte 0: Bit0 = Reihe 0, Spalte 0 Bit1 = Reihe 1, Spalte 0 ... Bit7 = Reihe 7, Spalte 0 Byte 1: Bit0 = Reihe 0, Spalte 1 Bit1 = Reihe 1, Spalte 1 ... Bit7 = Reihe 7, Spalte 1 Byte 12: Bit0 = Reihe 0, Spalte 12 ODER = Reihe 8, Spalte 0 Bit1 = Reihe 0, Spalte 12 ODER = Reihe 9, Spalte 0
Pics or it didn't happen (-: Edit: Bildchen angefügt, gute Idee, danke! Jetzt hat der TO aber wirklich genug Hinweise wie er seine Aufgabe lösen kann.
:
Bearbeitet durch User
Vielen Dank für eure Mühe. Ich werde versuchen die Idee zu implementieren und kann dann eine finale Rückmeldung geben. Sieht mir aber schon sehr nach chinesischen Schriftzeichen aus :)
Wenn man schon programmiert, wieso nicht ein kleines Tool selbst schreiben das in einem Fenster mögliche Zusammenhänge anzeigt und man nur noch zuschauen muss. Nur mal so als Pseudobeispiel...
1 | int x=0; int y=0; int maxheight=100; int maxWidth=100; int offset=0; int bytewidth=3; |
2 | |
3 | const unsigned char Array[] = { |
4 | 0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00, |
5 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
6 | 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40}; |
7 | |
8 | for(int b=1;b<bytewidth;b++) |
9 | for(int i=0;i<offset;i++) |
10 | for(int h=0;h<=maxheight;h++){ |
11 | y++; x=0; |
12 | for(int w=0;w<maxWidth*bytewidth;w=w+bytewidth) |
13 | {
|
14 | x++; |
15 | if(bytewidth==1) |
16 | setPixel(x,y,Array[offset+i*h*bytewidth]); |
17 | else if(bytewidth==2){ |
18 | setPixel(x,y,Array[offset+i*h*bytewidth]); |
19 | setPixel(x,y,Array[offset+i*h*(bytewidth+1)]); |
20 | }
|
21 | else if(bytewidth==3){ |
22 | setPixel(x,y,Array[offset+i*h*bytewidth]); |
23 | setPixel(x,y,Array[offset+i*h*bytewidth+1]); |
24 | setPixel(x,y,Array[offset+i*h*bytewidth+2]); |
25 | }
|
26 | delay(100); |
27 | |
28 | }
|
29 | }
|
30 | }
|
Ich habe mich jetzt dazu entschieden, eine vollständige Bitmap aus den gegebenen Werten zu erstellen. Die Größe passe ich nachträglich mittels magnify von imagemagick an. Die Hinweise die ich dankenswerterweise von euch bekommen habe, waren bei der Erstellung der Bitmap sehr hilfreich.
doublesobig schrieb: > Ich habe mich jetzt dazu entschieden, eine vollständige Bitmap aus den > gegebenen Werten zu erstellen. Die Größe passe ich nachträglich mittels > magnify von imagemagick an. Und was soll dann dabei herauskommen? Wen du bei solch einfachen kleinen Grafiken etwas skalierst, dann kommt immer Matsch dabei heraus, es sei denn, du skalierst integer, also mal 2 oder mal 3 oder so, dann werden die Klötzchen eben nur größer. Aber wozu? Wenn du kleine scharfe Icons brauchst, dann ist es allemal besser, diese selber zu malen - z.B. mit MSPaint, das kann mit passender Vergrößerung pixelweise. Abgesehen davon scheint mir dieses Bmp2C ein ziemlich lausiges Programm zu sein. Einfach nur einen Sack voll Zahlen auszuspeien, ohne irgend einen Kommentar, ohne irgend eine Formatangabe - igitt. W.S.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.