Forum: Mikrocontroller und Digitale Elektronik bmp Sanduhr Darstellung


von Klaus (Gast)


Lesenswert?

Hallo
In einem Programm sind verschieden bmp als Beispiel mit drin. Das Bild 
zur Uhr (rund) funktioniert sehr gut.
Unter dem Bild Sanduhr ist der gleiche Code mit einer anderen Grüöösse 
Angabe drin.
1
const uint8_t sand_uhr_bmp[] PROGMEM =  // geht nicht
2
  {
3
   25, 26,
4
   0,128,224,112, 56, 28, 12,  6,  6,  3,  3,  3, 59,  3,  3,  3, 6,134,204, 28, 56,112,224,128,  0,
5
   254,255,  1, 16, 16, 16,  0,0,  0,  6, 12, 24, 48, 24, 12,  6,  3,  1,  0, 16, 16, 16,  1,255,254,  
6
   0,  3, 15, 28, 56,112, 96,192,192,128,128,128,184,128,128,128,192,192, 96,112, 56, 28, 15,  3,  0,
7
   0,  0,  0,  0,  0, 0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0, 0,  0,  0,  0
8
  };
Kennt jemand den richtigen Code dazu oder eine Erklärung damit ich es 
selbst erstellen kann?
LG Klaus

von A. S. (Gast)


Lesenswert?

Klaus schrieb:
> Unter dem Bild Sanduhr ist der gleiche Code mit einer anderen Grüöösse
> Angabe drin.

Wo?

Was heißt Größe?

von Wolfgang (Gast)


Lesenswert?

Klaus schrieb:
> Unter dem Bild Sanduhr ist der gleiche Code mit einer anderen Grüöösse
> Angabe drin.

Ich sehe keinen Code

von K. S. (the_yrr)


Lesenswert?

Klaus schrieb:
> Kennt jemand den richtigen Code dazu oder eine Erklärung damit ich es
> selbst erstellen kann?

Das wahrscheinlichste wäre, dass du das Array als 2D interpretieren 
musst. Alle Pixel der Bitmap sind Zeilen oder Spaltenweise nacheinander 
da drin. Zähl also die Einträge im Array, dann rate/probier die Größe 
aus bis es klappt.

von Paul (Gast)


Lesenswert?

Bist du sicher das kein Code da ist? Zur Vorsicjht noch mal den Code für 
Sanduhr und Uhr.
1
const uint8_t sand_uhr_bmp[] PROGMEM =  // geht nicht
2
  {
3
   25, 26,
4
   0,128,224,112, 56, 28, 12,  6,  6,  3,  3,  3, 59,  3,  3,  3, 6,134,204, 28, 56,112,224,128,  0,
5
   254,255,  1, 16, 16, 16,  0,0,  0,  6, 12, 24, 48, 24, 12,  6,  3,  1,  0, 16, 16, 16,  1,255,254,  
6
   0,  3, 15, 28, 56,112, 96,192,192,128,128,128,184,128,128,128,192,192, 96,112, 56, 28, 15,  3,  0,
7
   0,  0,  0,  0,  0, 0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0, 0,  0,  0,  0
8
  };
9
10
const uint8_t uhr_bmp[] PROGMEM =    
11
  {
12
  25, 32,                                // Angabe ger Grösse des BMP
13
  0,128,224,112, 56, 28, 12, 6, 6, 3, 3, 3, 59, 3,  3, 3, 6, 134, 204, 28, 56, 112, 224, 128,  0,    
14
  254,255, 1, 16, 16, 16, 0, 0, 0, 6, 12, 24, 48, 24, 12, 6, 3, 1, 0, 16, 16, 16, 1, 255, 254,  
15
  0, 3, 15, 28, 56,112, 96,192,192,128,128,128,184,128,128,128,192,192, 96, 112, 56, 28, 15, 3, 0,  
16
  0,  0,  0,  0,  0, 0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0, 0,  0,  0,  0                   
17
  };
Bleibt immer noch das Problem warum die Sanduhr nicht geht oder besser 
als Uhr dargestellt. Sicher kommt jemand auf die Idee, das muss so sein 
weil in jedem Teil da gleiche. Stimmt. Hat jemand sowas für eine 
Sanduhr?

von Paul (Gast)


Lesenswert?

K. S. schrieb:
> Das wahrscheinlichste wäre, dass du das Array als 2D interpretieren
> musst. Alle Pixel der Bitmap sind Zeilen oder Spaltenweise nacheinander
> da drin. Zähl also die Einträge im Array, dann rate/probier die Größe
> aus bis es klappt.

Klingt nicht schlecht, komme aber nicht so richtig damit klar. Kennst du 
ein paar lesbare Quellen dazu?

von Εrnst B. (ernst)


Lesenswert?

Paul schrieb:
> Bist du sicher das kein Code da ist?

Das Problem liegt beim nicht-gezeigten Code. So sind das einfach Arrays, 
was die darstellen sollen ergibt sich allenfalls für einen menschlichen 
Leser aus den Kommentaren/variablennamen.

Was das Problem ist, wissen wir nicht, und auch was es verursacht nicht, 
können also nur raten.

Kann der Darstellung-Code z.B. nicht mit der "Schiefen" Breite von 26 
Pixeln umgehen, weil er nur ganze Bytes (mit 8 Pixeln) verarbeitet?

von Troll? (Gast)


Lesenswert?

Ob Klaus/Heinz/Paul... das in 2019 schon mal gefragt hat?
Beitrag "bmp Beispieldatei"

von Georg (Gast)


Lesenswert?

Εrnst B. schrieb:
> So sind das einfach Arrays,
> was die darstellen sollen ergibt sich allenfalls für einen menschlichen
> Leser aus den Kommentaren/variablennamen

Die 2. Version ergibt tatsächlich 25 x 32 Pixel, die erste nicht. Man 
kann die Bits verschieden anordnen z. B. 1 Byte 224 als ***-----, unter- 
oder nebeneinander schreiben, bis sich ein sinnvolles Bild ergibt 
(sollte Ähnlichkeit mit einer Sanduhr haben, ist mir jetzt aber zu 
mühsam).

Georg

von Michael F. (Firma: IAR Systems) (michael_iar)


Lesenswert?

Beide Arrays haben 100 Bytes (= 800 Bits) Nutzdaten, wenn man die ersten 
beiden Bytes als Länge/Breite interpretiert und somit lässt sich damit 
eine 25x32 Matrix füllen.

Stimmt die Angabe der Größe mit "25,26", da im funktionierenden Beispiel 
"25,32" angegeben ist?

Gruß,
Michael

von Paul (Gast)


Lesenswert?

Michael F. schrieb:
> Stimmt die Angabe der Größe mit "25,26", da im funktionierenden Beispiel
> "25,32" angegeben ist?
Die Angabe steht so im ori.
Mit der Angabe 25,32 wird eine runde Uhr angezeigt. Mit der Angabe 25,26 
wird nichts angezeigt. Wenn ich 25,26 auf 25,32 ändere wird auch eine 
runde uhr angezeigt.
Es stimmt soweit, habe vor längerer Zeit bereits nach einer Lösung 
gesucht, leider ohne Erfolg. Vielleicht klappt es heute besser.

von Lotta (Gast)


Lesenswert?

Hallo,

Die Felder wurden mit ner Library und nem Fontenerator
vin einem freak unseres Forums erzeugt, siehe hier!

Beitrag "Library für EA-DOGM Grafikdisplays inkl. Font-Generator"

mfg

von Lotta (Gast)


Lesenswert?

Aber das wißt ihr ja wohl schon. :-)

mfg

von Wolfgang (Gast)


Lesenswert?

Georg schrieb:
> ... oder nebeneinander schreiben, bis sich ein sinnvolles Bild ergibt
> (sollte Ähnlichkeit mit einer Sanduhr haben, ist mir jetzt aber zu
> mühsam).
Warum sollten - bis auf 4 Bit - identische Daten einmal eine runde Uhr 
und einmal eine Sanduhr ergeben?
Da kann man lange hin- und her schreiben, um daraus eine Sanduhr zu 
machen ;-)

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Wie soll bei Umstellung einer 32 in 26, aus einer runden Uhr eine 
Sanduhr werden?
Verstehe ich jetzt nicht.
Beide genannten Bitmaps haben denselben Inhalt.


Ups: Hat mein Vorposter auch bereits geschrieben - man sollte immer 
alles lesen. ;-)

von Georg (Gast)


Lesenswert?

Christian H. schrieb:
> Beide genannten Bitmaps haben denselben Inhalt.

Vermutlich benutzt die vom TO sorgfältig geheimgehaltene Software bei 
der Angabe von 25 x 26 die gleichen 4 Bytes wie bei 25 x 32, weil ganz 
einfach 26 Pixel 3,25 Bytes ergeben, was es nicht gibt oder zumindest 
sehr unpraktisch ist - die zuviel enthaltenen 6 Pixel werden dann halt 
abgeschnitten bzw. nicht dargestellt. Macht man üblicherweise so, wenn 
die Arraygrenzen keine ganzen Bytes ergeben und man nicht aufwendig 
schieben und kombinieren will.

Weitere Vermutung: die geheime Software des TO kann das nicht und passt 
offensichtlich nicht zur 1. Version des Pixelarrays.

Wolfgang schrieb:
> Da kann man lange hin- und her schreiben, um daraus eine Sanduhr zu
> machen ;-)

Das mit der Sanduhr behauptet ja der TO. Das muss keine gesicherte 
wissenschaftliche Tatsache sein.

Georg

von Frank S. (_frank_s_)


Lesenswert?

Ich hätte gern einmal ein Foto von der runden Uhr und der Sanduhr (darf 
auch unscharf mit 2MB sein) aus dem hochgeheimen Programm.
Vielleich kann man dann eine Alternative basteln.

MfG von der Spree
Frank

von Εrnst B. (ernst)


Lesenswert?

Frank S. schrieb:
> Ich hätte gern einmal ein Foto von der runden Uhr und der Sanduhr

Evtl. brauchts das auch garnicht, weil Unicode inzwischen ausreichend 
(Sand-)Uhren enthält?

⌛⏳⌚⏰⏱️⏱⏲️⏲🕰️🕰🕛🕐🕚

von Chris (Gast)


Lesenswert?

Paul schrieb:
> Es stimmt soweit, habe vor längerer Zeit bereits nach einer Lösung
> gesucht, leider ohne Erfolg. Vielleicht klappt es heute besser.

Mensch Klaus/Paul/Heinz/Ein Wiesbegieriger!
Im oben verlinkten Thread warst Du doch schon viel weiter mit dem 
Verständnis: ( 
Beitrag "Re: bmp Beispieldatei" )

Da die ganzen von Yalu X. erzeugten Arrays laut Deinen Aussagen auch 
richtig angezeigt wurden, habt ihr doch schon komplett verstanden, wie 
das alles geht! :)

Mein Tipp: Lass' Dich nicht durch die vielen Ratschläge zu irgendwelchen 
Programmen und Code-Generatoren durcheinanderbringen, sondern mal' Dir 
Dein gewünschtes Bild auf Karo-Papier auf, und dann ermittle die Zahlen 
für das Array von Hand. In dem Beitrag hast Du selbst schon geschrieben, 
was diese Zahlen bedeuten! Also musst Du das jetzt nur rückwärts machen, 
von den Pixeln zur Zahl.


PS: Du wurdest auch schon darauf hingewiesen, dass Du in einem Thread 
bitte bei nur einem Namen bleiben sollst. Hier fängst Du wieder mit dem 
durcheinander an. Das ist nicht sehr nett, erschwert uns die Hilfe, und 
fördert dem Umstand, dass sich hier Leute nur über Dich lustig machen 
wollen.

von Wolfgang (Gast)


Lesenswert?

Chris schrieb:
> ... und dann ermittle die Zahlen für das Array von Hand.

Dezimalzahlen und dazu noch mit freier Formatierung gehört dabei sicher 
zu einer der unüberischtlichsten Darstellungsformen.

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.