Gast
#5314099
Hallo, ich möchte gerne eine Funktion schreiben die mir mein Character aus dem Array zieht. Wie berechne Ich denn nun den Start bzw. Anfang von meinem Zeichen?
1 | |
Würde mich über Anregungen freuen.
|
Anzeige
|
Font Array auslesen?!
Gast
#5314099
Hallo, ich möchte gerne eine Funktion schreiben die mir mein Character aus dem Array zieht. Wie berechne Ich denn nun den Start bzw. Anfang von meinem Zeichen?
Würde mich über Anregungen freuen.
Gast
#5314191
Es gibt ja einen Bereich in dem steht wie breit ein Zeichen ist (in words - 16 Bit). Du musst also die Beiten aller Zeichen die vor deinem gesuchten Zeichen im Array stehen aufsummieren.
Gast
#5314202
Martin schrieb: > Es gibt ja einen Bereich in dem steht wie breit ein Zeichen ist > (in > words - 16 Bit). Du musst also die Beiten aller Zeichen die vor deinem > gesuchten Zeichen im Array stehen aufsummieren. Und woher weiß Ich wie viele ich aufsummieren muss bis mein Zeichen kommt? Peter W. schrieb: > Und woher weiß Ich wie viele ich aufsummieren muss bis mein Zeichen > kommt? Du wirst ja wohl wissen wo das Zeichen steht, sonst könntest du es ja garnicht verwenden.
Gast
#5314250
>Es gibt ja einen Bereich in dem steht wie breit ein Zeichen ist (in >words - 16 Bit). Du musst also die Beiten aller Zeichen die vor deinem >gesuchten Zeichen im Array stehen aufsummieren. + die 6Byte für size .. + 96 Bytes für die char widths
Gast
#5314255
Peter W. schrieb: > Und woher weiß Ich wie viele ich aufsummieren muss bis mein Zeichen > kommt? Weißt du was ASCII ist? Jedes Zeichen entspricht einer Nummer.
Gast
#5314258
Den Ofset musst du aber auch berücksichtigen, die Tabelle fängt erst beim Space (0x20) an.
Gast
#5314260
bzw. noch ein Zeichen da nach.
Gast
#5314266
Die Tabelle folgt doch gar nicht der ASCII Tabelle?
Gast
#5314282
Wie bekomme ich das erste Byte von der '0'?
Gast
#5314301
Peter W. schrieb: > Die Tabelle folgt doch gar nicht der ASCII Tabelle? Martin schrieb: > Den Ofset musst du aber auch berücksichtigen, die Tabelle fängt erst > beim Space (0x20) an.
Gast
#5314312
Am Ende jeder Zeile steht der Code für das Zeichen in dezimaler Schreibweise.
Gast
#5314333
Martin schrieb: > Am Ende jeder Zeile steht der Code für das Zeichen in dezimaler > Schreibweise. Der Offset müsste 102 sein anstatt 96 oder nicht?
Gast
#5314337
dummschwaetzer schrieb: > + die 6Byte für size .. + 96 Bytes für die char widths
Gast
#5314342
Ich meine aber noch was anderes. Das erste Zeichen ist nicht ASCII 0x00 sondern 0x21 (33).
Gast
#5314343
Martin schrieb: > dummschwaetzer schrieb: >> + die 6Byte für size .. + 96 Bytes für die char widths Ah okay überlesen. Nun wenn ich '0' + 102 rechne komme Ich immer noch nicht an den Anfang der Zahl '0' ich muss die breiten von den vorherigen Zahlen noch hinzu rechnen oder?
Gast
#5314347
Oben steht es ja. Wie stelle ich das an? Woher weiß Ich wie viel Ich aufsummieren muss? Stehe auf dem Schlauch.
Gast
#5314351
Wie ist der ASCII von '0'?
Gast
#5314367
Martin schrieb: > '0' 0x30
Gast
#5314369
48 Martin schrieb: > Wie ist der ASCII von '0'? 48
Gast
#5314389
genau! Das erste Zeichen in der Tabelle ist das Space 0x20 32. Wobei das Space eine Breite von 0 hat. Das nöchste Zeiche (0x21 / 33) ist das '!' . Das hat eine Breite von 1 Pixel. // char widths 0x00, 0x01, 0x03, 0x08, 0x07, 0x0A, 0x08, 0x01, 0x03, 0x03, // font data 0xFE, 0x14, // 33 0x1E, 0x00, 0x1E, 0x00, 0x00, 0x00, // 34 Beachte, da jedes Zeichen 14 Bit hoch ist benötigt jede Spalte 2 Byte. Jetzt musst du nur von 0x20 (32, Space) bis 0x30 (48, '0') zählen und die Werte unter "char widths" aufaddieren.
Gast
#5314392
Das dann mal 2 wegen 2 Byte pro Spalte + den Offset von 102 Byte.
Gast
#5314412
Und das aufsummieren?
Gast
#5314425
Da würfelst du was durcheinander. Peter W. schrieb: > start++ Peter W. schrieb: > start += Und zum Schluß die 102 Byte nicht vergessen.
Gast
#5314433
Und die 2 Byte pro Pixel Spalte auch nicht unterschlagen.
Gast
#5314449
In dem Array stecken mehr als 256 Byte. Deswegen kommst du mit int8_t nicht aus. Was hällst du von :
Um das Variabel zu halten kannst du auch die 32 durch Arial_14[4] ersetzen usw.
Gast
#5314452
sorry
Gast
#5314491
Ich müsste am besten wirklich eine Struktur anlegen oder? Brauche ja noch noch die Breite für das Zeichen.
Gast
#5314511
Könnte man machen. Ich denke der Übersichtlichkeit würde es was bringen. Verstanden hast du jetzt aber alles?
Gast
#5314522
Du musst dann aber aufpassen, dass die Struktur auch auf andere Fonts / Fontgrößen angewendet werden kann.
Gast
#5314534
Ich werde es mir gleich mal anschauen und versuchen was auszugeben.
Gast
#5314543
Benötigt man noch was?
Gast
#5314620
Peter W. schrieb: > font_t calcFontStart(uint8_t c, font_t font) > { > uint8_t charNum = 0; > font.width = Arial_14[c+6]; > > font.indexNum = 102; > for(; charNum <= c - 32 ; charNum++) > font.indexNum += Arial_14[charNum + 6] * 2; > > return font; > } Sicher das die Rechnung so richtig ist?
Gast
#5314691
Wenn ich die Werte aufsummiere für den Anfang von '0' komme ich auf 271. Dort steht aber was anderes als die Pixel für '0'
Gast
#5314720
Habe es jetzt hin bekommen. Nur, irgendwie.. Fehlt immer eine Spalte von den Zahlen oder Buchstaben.. das sieht echt komisch aus...
Gast
#5314807
Hier mal das Foto. Was kann das sein? Muss ja irgendwie was fehlen? Zeile 42.
Gast
#5314833
nein, 2 Zeilen zuviel
Gast
#5314835
stell mal / \ dar, oder ein anderes Zeichen mit Diagonale
Gast
#5314840
es fehlt keine Zeile, es ist eine "leere" Zeile zu viel
Gast
#5314856
>stell mal / \ dar, oder ein anderes Zeichen mit Diagonale
Ww bitte
Gast
#5314867
Hast du irgendwo in der Doku die Beschreibung welches Bit welchem Pixel entspricht, z.B Breite 1: 0xFE, 0x14, // 33 Das sind 16Bit, deine schrift iat aber nur 14Pixel(0x0E, // height) hoch.
Gast
#5314887
dummschwaetzer schrieb: > Hast du irgendwo in der Doku die Beschreibung welches Bit welchem > Pixel > entspricht, > z.B Breite 1: > 0xFE, 0x14, // 33 > Das sind 16Bit, deine schrift iat aber nur 14Pixel(0x0E, // height) > hoch. Bei meinem Display wird alles "senkrecht" geschrieben. [C] 0 // Bit 7 0 0 0 0 0 0 0 // Bit 0 {/C] Das wäre die Erste Zeile vom Display.
Gast
#5314892
das sind aber erst 8 der 14 Bit
Gast
#5314894
dummschwaetzer schrieb: > das sind aber erst 8 der 14 Bit Die anderen werden dann daunter geschrieben.
Gast
#5314899
Das ist mein aktueller Code
Gast
#5314901
da hast du dann aber nur 6Bit??? Sicher, dass die Zeile 8 Pixel hoch ist?
Gast
#5314902
dummschwaetzer schrieb: > da hast du dann aber nur 6Bit??? > Sicher, dass die Zeile 8 Pixel hoch ist? Wie kommst du auf 6 Bit?
Gast
#5314905
weil deine schrift nur 14 bit hoch ist
Gast
#5314906
mach mal das Ausrufezeichen, W, w, \, / mit in deinen teststring
Gast
#5314908
dummschwaetzer schrieb: > weil deine schrift nur 14 bit hoch ist Ja und? Der Rest ist doch dann "0"
Gast
#5314917
dummschwaetzer schrieb: > mach mal das Ausrufezeichen, W, w, \, / mit in deinen teststring Habe das Board gerade nicht zur Hand. Werde es morgen früh direkt ausprobieren. Was soll das bringen?
Gast
#5314942
Welche Bits der 16 vorgegebenen sind zu viel? Beispiel: ! 0xFE, 0x14, // 33 Zeile Interpretation1 0 X -\ 1 X - \F 2 X - / 3 X -/ 4 X -\ 5 X - \E 6 X - / 7 -/ 8 -\ 9 - \1 10 - / 11 X -/ 12 -\ 13 X - \4 14 - / 15 -/ sieht komisch aus für ein Ausrufezeichen.
Gast
#5314950
dummschwaetzer schrieb: > Welche Bits der 16 vorgegebenen sind zu viel? > Beispiel: > ! > 0xFE, 0x14, // 33 Was soll mir das jetzt sagen? Die Zeichen sehen soweit richtig aus. Es wird glaube Ich mal nicht am Zeichensatz liegen, meinste nicht auch? dummschwaetzer schrieb: > sieht komisch aus für ein Ausrufezeichen. Vom zweiten Byte nur 6 bit, vom ersten kommt bit 0 natürlich nach oben 7 - byte 0 bit 0 6 X - byte 0 bit 1 5 X - byte 0 bit 2 4 X - byte 0 bit 3 3 X - byte 0 bit 4 2 X - byte 0 bit 5 1 X - byte 0 bit 6 0 X - byte 0 bit 7 13 X - byte 1 bit 0 12 - byte 1 bit 3 11 X - byte 1 bit 4 10 - byte 1 bit 5 9 - byte 1 bit 6 8 - byte 1 bit 7
Gast
#5314971
Michael B. schrieb: > dummschwaetzer schrieb: >> sieht komisch aus für ein Ausrufezeichen. > > Vom zweiten Byte nur 6 bit, > vom ersten kommt bit 0 natürlich nach oben Ja gut. Soll das heißen das mein anderes Byte verkehrt rum geschrieben wird?
Gast
#5314972
und da sind seine zwei Leerzeilen in seinem Displaybild. vom 2.Byte die ersten beiden Bits nicht auf das Display.
Gast
#5314975
Dann muss ich das Byte um zwei nach oben verschieben. Sowas habe ich mir auch schon gedacht.. (PixelDatenVom2Byte<<2)
Gast
#5314982
dummschwaetzer schrieb: > und da sind seine zwei Leerzeilen in seinem Displaybild. > vom 2.Byte die ersten beiden Bits nicht auf das Display. Wieso wird dann solch ein Font erstellt? Das kommt doch sicherlich von einem PC Programm? Gibt es andere Displays die nicht senkrecht die Bytes auf dem Bildschirm werfen sondern waagerecht? Man kann je nach Setup viele Displays von oben nach unten, unten nach oben, links nach rechts oder rechts nach links beschreiben. Wie man es halt gerade braucht. Oder weil man das Display um 90° drehen möchte. Oder vielleicht hat man einen Spiegel dazwischen... Und manch einer weiß das alles nicht und schreibt daher seinen Font komisch. Schon alles gesehen.
Gast
#5315002
Nico W. schrieb: > Man kann je nach Setup viele Displays von oben nach unten, unten > nach > oben, links nach rechts oder rechts nach links beschreiben. Wie man es > halt gerade braucht. Oder weil man das Display um 90° drehen möchte. > Oder vielleicht hat man einen Spiegel dazwischen... > > Und manch einer weiß das alles nicht und schreibt daher seinen Font > komisch. Schon alles gesehen. Na gut. Ich hoffe ja da drauf das es wirklich mit dem unteresBild<<2 ist und sich das Problem dadurch lösen lässt. Bin zuversichtlich-
Gast
#5315058
Korrektur: Michael B. schrieb: > 7 - byte 0 bit 0 > 6 X - byte 0 bit 1 > 5 X - byte 0 bit 2 > 4 X - byte 0 bit 3 > 3 X - byte 0 bit 4 > 2 X - byte 0 bit 5 > 1 X - byte 0 bit 6 > 0 X - byte 0 bit 7 > 13 X - byte 1 bit 0 > 12 - byte 1 bit 3 > 11 X - byte 1 bit 4 > 10 - byte 1 bit 5 > 9 - byte 1 bit 6 > 8 - byte 1 bit 7 dummschwaetzer schrieb: > vom 2.Byte die ersten beiden Bits nicht auf das Display. vom 2.Byte das zweite und dritte Bit nicht auf das Display. Da hat doch Peter recht gehabt mit dem schieben oder nicht? Wenn das zweite und dritte nicht aufs Display soll..
Gast
#5315403
Tatsächlich! Das war es. Wieso aber funktioniert das? Hat man den Font extra so angelegt? Ist das jetzt wirklich Display spezifisch? Danke an alle die geholfen haben.
Gast
#5315409
Was mir jetzt noch aufgefallen ist. Wenn ich einen String ausgeben will mit dem Text, wie berechne Ich die Leerzeichen dazwischen? Aktuell schreib Ich jedes Zeichen auf das letzte..
Gast
#5315413
Ah okay.
So habe Ich es jetzt gelöst. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|