Da ich auf die Schnelle keine fertige Schriftart gefunden hatte die auf mein LCD gepasst hat, habe ich ein paar erstellt. Insgesamt sind hier 14 verschiedene Schriftgrößen von 4x6 Pixel bis 12x16 Pixel enthalten, jeweils als Assembler und C Header mit verschiedenen Ausrichtungen (Vertikal, Horizontal, gespiegelt, link/rechts ausgerichtet usw.) Der Zeichensatz ist die Codepage 850.
:
Gesperrt durch Moderator
Hallo Benedikt, vielen Dank fuer die Fonts. Sie haben mir bei einem Problem mit Screenkey (Schalter mit eingebauten Display) sehr geholfen.
können diese ASM Fonts auch in BASCOM verwendet werden? und wenn ja wie?
LCD schriften sind relativ einfach mit einem PC erstellbar. Dort, ein kleines Prograemmchen schreiben, das einen drop down selektierbaren Font auf einen Canvas klatscht. Diesen Canvas kann man dann als Bitmap pixel fuer pixel auslesen. Gewisse AVR und PIC Compiler koennen das schon von selbst. Z
@Zurr: Könntest Du vielleicht das "kleine Progrämmchen" schreiben, vielleicht in der Mittagspause ?
Jaja der Zurr cannwas Leinwand heißt das Wort auf deutsch, hilft mir auch nicht weiter Bitte erklären
ich hatte auch mal länger nach fertigen Fonts gesucht aber nicht so das richtige gefunden. Brauchbar waren einige Tools die einen Zeichensatz in einer Bitmap dargestellt haben und das liess sich dann speichern. Ich habe dann ein kleines Tool gebastelt das die Bitmap einliest und C-Defines generiert die ich dann in eine C Quelle includen kann. Das Ganze ist in C# geschrieben und so minimalistisch wie ich es brauchte.
Ein fertiges Progrämmchen gibt es doch schon lange bei apetetch.de oder hier im Forum im Thread zur k10108 library. Allerdings stellt man dann doch schnell fest, daß all die schönen Windows-True-Type-Fonts in den für LCD's typischen Größe von 6-10 Pixeln ziemlich gruselig aussehen. Die echten Pixelfonts hier gewinnen zwar auch keinen Schönheitspreis, sind aber wenigstens lesbar. Oliver
Hallo, dieses Thema ist zwar schon etwas älter, aber der Vollständigkeit halber wollte ich noch dazuschreiben, dass wir ins KontrollerLab aus gegebenem Anlass einen Font-Wizard reingebastelt haben. Nähere Infos findet Ihr hier: http://www.cadmaniac.org/projectMain.php?projectName=kontrollerlab§ion=docs_font_wizard Der Font-Wizard "grabbt" PC-Schriftarten, wie oben beschrieben, hat eine GUI, in der man einiges einstellen und editieren kann, kann die Schriftarten für verschiedene Displays (zeilen oder spaltenorientiert) aufbereiten, kann RLE-Kompression... Code zum Anzeigen der damit generierten Schriftarten sowie ein YouTube-Video, das dieses Beispiel zeigt, findet ihr unter: http://www.cadmaniac.org/projectMain.php?projectName=kontrollerlab§ion=font_wizard_tutorial viele Grüße, cadManiac
Vielen Dank Benedikt, deine Fonts waren gerade sehr nützlich :)
Hier ist eine neue, etwas korrigierte Version, da einige der Anordnungen der Schriftarten bei der obigen Version etwas zerstückelt waren.
Vielen Dank, das neue Display kann jetzt was anzeigen :)
@ Benedikt K. (benedikt) Erstmal vielen Dank für die Weitergabe der Fonts. Die helfen beim Einstieg in die GLCDs ungemein. Jetzt habe ich mal den 32x53-Pixel-Font probiert und dabei das Problem, dass die angezeigten Ziffern unvollständig dargestellt werden. Links fehlt immer ein Teil. Da die kleineren Font spielen, denke ich mal, dass mein Code halbwegs läuft. Deshalb meine Frage, ob es bei den gro0en Fonts irgendwas besonderes zu beachten ist oder ob vielleicht beim konvertieren der Fehlerteufel zugeschlagen hat? Danke und Gruß
Sag mir mal genau welchen du verwendest hast, dann prüf ich das mal.
Ich habe den Font 32x53_horizontal_MSB_1.asm genommen. Danke und Gruß, Jens
Ich habe den Fehler gefunden. Ich hatte einen Schreibfehler in meiner Erstellungssoftware die um 27 statt 24bit in einem Byte geschoben hat. Dadurch waren die Daten ein wenig verschoben.
Danke für die schnelle Antwort, werde ich heute abend gleich mal testen.
Hallo Benedikt, erstmal danke für deine Fonts.Sie habe mir sehr weiter geholfen. Leider habe ich eine kleines Problemchen: Für mein Projekt brauche ich 2 verschiedene Fontgrößen. 12x16 und 22x36 sind hierfür perfekt. Doch leider passen die Schriftarten nicht überein. OK, ich weiß das 12x20 und 22x36 die gleiche Schrift haben, aber ich finde die Schriftart von 12x16 einfach wesentlich besser und schneller lesbar. Und auf Geschwindigkeit kommt es an... Könntest du bitte zu deinem Fontpack noch die Font 22x36, oder wie dann das Verhältnis auch immer ist, mit der Schriftart wie in 12x16 erstellen? Nur eine Breite von 22 (oder 21 wäre auch OK) ist wichtig. Oder kannst du die Quellen der Fonttools offen legen und uns mitteilen was du für Schriftarten verwendet hast? Besten Dank Jürgen
Diese andere Schriftart steht mir leider nur bis max 12x16 oder 10x18 zur Verfügung, daher kann ich nichts größeres erstellen. Falls du aber irgendeine passende Schriftart hast, und ein Bild in der Art wie die Bilder in dem Paket erstellen kannst, dann kann ich die gerne in das passende Format umwandeln.
Hallo Benedikt, danke für deine schnelle Antwort. Das mit der Schrift ist echt schade. Vor allem die 0 finde ich ist durch die eckigere Art einfach wesentlich besser und schneller lesbar. Naja gut ich werde das schon irgendwie hinfrickeln. Dank Jürgen
Hallo, kann mal einer kurz erläutern wie man die Font Dateien verwendet? Einfach mal als ganz simples Beispiel auf meinem Startbildschirm soll nur ein einzelner Buchstabe dargestellt werde. Wie gehe ich vor um den Buchstaben "auf zurufen". Danke schon mal im vorweg!
Buchstabe -> zugehörige Pixeldaten aus dem Font -> auf's Display zeichnen Zeichenkette (monospaced) Buchstaben mit Fontbreite Versatz (proportional) Buchstaben mit festem Abstand Versatz, leere Zeichenspalten/reihen erkennen und überspringen (=weglassen)
Hier mal ein ganz einfaches Beispiel für eine 6x8 Schriftart:
1 | #include "6x8_horizontal_LSB_1.h" |
2 | |
3 | void writechar(unsigned char c) |
4 | { unsigned char x,y,w; |
5 | for (y=0; y<8; y++) |
6 | { w=font[c][y]; |
7 | for (x=0; x<6; x++) |
8 | { if (w&1) |
9 | setpixel(x,y); |
10 | else
|
11 | clrpixel(x,y); |
12 | w=w>>1; |
13 | }
|
14 | }
|
15 | }
|
Die Schriften sind ein 2 Dimensionales Array mit 256 Einträge (da 256 Zeichen) zu je einer von der Größe des Zeichens abhängigen Größe.
Hallo, @ Benedikt: danke für deine tollen Schriften. Ich habe ein kleines Verständnisproblem: das Beispielprogramm mit einer 6x8 Schrift ist mir klar und funktioniert auch. Aber ich möchte gerne eine 22x36 Schriftart verwenden. Bei dieser Schrift ist mir der Aufbau der Datei aber noch nicht ganz klar. Da bei dieser Schrift mehrere Elemete einer Array Zeile übereinander angezeigt werden müssen um die höhe des Zeichens zu erreichen. Aber welche Elemente liegen übereinander? Jeweils ein Viererblock? Christian
Hallo, vielleicht ist der Font and Bitmap Generator unter www.muGUI.de für Euch interessant. Es gibt auch einige Beispiele wie man die Schriften auf ein Display bekommt. Viele Grüße muGUI
Hallo Ich möchte auf einem Grafik OLED die in der font.h gespeicherten Zeichen darstellen. Das ganze funktioniert ja wenn ich das richtig sehe über ein zweidimensionales Array. Ich würde jetzt gerne wissen woher ich weiß, welches Zeichen in welchem Array-Feld steht!? Hilft da nur einmal auslesen und sich dann merken? Oder wie macht ihr das? Vielen Dank schonmal! Grüße Bean
Hallo, ich habe mir ein PC-Programm geschrieben, mit dem ich das Auslesen der Datei solange probiert habe. Bin also auch nur durch Try&Error weiter gekommen. Hier mal meine Funktion für die 22x36 Schrift, bei der ich aber am Anfang und Ende jeder Zeile die Leeren Elemente gelöscht habe, um das Array kleiner zu bekommen:
1 | void g_draw_char_large(unsigned short x1, unsigned short y1, unsigned char c) |
2 | {
|
3 | unsigned char x,y,w,n=0,x2=0,y2=0; |
4 | for (y=0; y<76; y+=3) |
5 | {
|
6 | for(n=0; n<3; n++) |
7 | {
|
8 | w=font22x36[c][y+n]; |
9 | |
10 | for (x=14; x<22; x++) |
11 | {
|
12 | if (w&1) |
13 | lcd_graphics_plot_pixel(x1+x2, y1+y2, PIXEL_ON); |
14 | else
|
15 | lcd_graphics_plot_pixel(x1+x2, y1+y2, PIXEL_OFF); |
16 | w=w>>1; |
17 | |
18 | x2++; |
19 | }
|
20 | }
|
21 | y2++; |
22 | x2=0; |
23 | }
|
24 | }
|
Zur Position der Zeichen in der Datei: In jeder Zeile steht ein Zeichen. Die Zeichen sind nach ihrem ASCII Code sortiert. Als Beispiel: Die Ziffer "0" ist 0x30h oder Dez. 48, dh, sie steht in dem Array in der Zeile 48 (0x30h) Das Zeichen "a" steht in Zeile. 97 (0x61h) MfG Christian
@ Benedik Danke für die tolle Bibliothek! Welche Fonts und Toolchain nutzt du für die kleinen Schriftarten? Gruß Sam
Hallo, ich habe mir vor kurzem mal die Mühe gemacht, die 'normalen' Zeichen der 8x8 Font vom C64 LCD-gerecht zu codieren. Die Werte sind spaltenweise im Array eingetragen, also erstes Zeichen, erster Wert, Bit 0 entspricht dem linken oberen Pixel des 8x8 Blocks. Bit 1 ist dann das Pixel da drunter, zweiter Wert vom ersten Zeichen, Bit 0, ist das Pixel daneben und so weiter. Hat den Hintergrund, dass ich so immer gleich das gesamte Byte an den LCD Kontroller schicke und das ganze nicht mit 64 Pixeln machen muss. Falls also jemand ein bißchen Retro-Look möchte und sein LCD ausreichen groß ist - bei 8x8 großen Zeichen braucht man schon etwas mehr Breite - kann er das gerne mal ausprobieren. Ich freue mich über Rückmeldungen, weil ich es bis jetzt noch nicht geschafft habe, die Font zu testen ;) Gruß, Timo.
Hallo allerseits, @Timo: Dein C64 - Font hat was, siehe Anhang. Ich hatte seinerzeit nen Amstrad CPC464, mal sehen ob ich den aus Linux rauskrieg, dort gibt's nen emu. Gruß, Christoph.
Ups, da war bei mir der Fehlerteufel am Werk, der Zeichensatz stimmt, meine Darstellung ist falsch. Die letzte Pixelreihe wird nicht dargestellt. Sorry. Gruß, Christoph
Hallo, super - Danke, spart mir eine Menge Arbeit. Frage: Wie ist das lizenzrechtlich? Momentan will ich einen Font noch privat einsetzen, es könnte aber mehr daraus werden. Ich habe leider keine Angaben über die Lizenz gefunden...? Gruß, Marvin.
danqe göh wor recht supper vu dia benedikt Kanntesch du bittschia zu deinem Fontpack nou die Font 22x36, oder wie nocha deis Verhältnis hold ou allaweil isch, mit der Schriftart wia in 12x16 erstella? Lei in einer Breite fu 22 (oder 21 war ou suppr) isch iatz schua bärig danqe ga. Schiana griaß fum zomser, servas ga.
Etwas älter aber mein Lob. Mit welcher Software wurden diese Fonts erstellt? Brauche einen Font vertikal MSB mit einer höhe von 32Pixeln. Habe zwar bei Google massig Programme gefunden wie FontCreator, GLCD_Env, eadog, fonwiz ... aber irgenwie komme ich mit den Programmen nicht klar (ausser GLCD) da ich entweder die Windows Schriftarten nicht öffnen kann oder ich das speichern nicht hinbekomme. Bei GLCD geht es soweit, nur das ich das einstellen den Größe etwas verwirrend finde und dann alles abschreiben um ggf. noch MSB umrechnen muss. Vielleicht hat ja auch schon jemand einen Font mit 32Bit Höhe erstellt.
Hallo zusammen, ich würde diese Fonts gern in Verbindung mit der apetech GLCD Lib verwenden. Ich tu mich mit der Umsetzung allerdings schwer. Das ganze per progmem so umzusetzen, dass die Zeichen aus dem Flash gelesen werden ist ja kein Problem. Aber in den header Files für die aptech Lib wird nur ein eindimensionales array benutzt und ich steh grad total auf dem Schlauch wie man das eventuell konvertieren könnte. Hat jemand diese Fonts eventuell schon mit der apetech Lib verwendet? Wäre für einen Tip dankbar. Gruß Cabal
Die Fonts liegen als C-Quelle vor. Wenn es zu unbequem ist, den Zugriff in der Anwendung zu linearisieren, schreib einfach ein C-Progrämmchen (für den PC) das die Datei includet und passend wieder als C-Quelle ausspuckt.
Michael D. schrieb: > Mit welcher Software wurden diese Fonts erstellt? das würde mich auch interessieren. Des Weiteren ist die 22x36 Font eine 24bit breite Font. Ich bräuchte noch eine 20x und eine 22x36 Font
Man sollte doch besser prüfen, bevor man sich (Zeit ans Bein) bindet. Vielen Dank, Bernhard, für die Fonts. Aber sie stimmen leider nicht mit dem Ascii-Code überein. Jedenfalls nicht im erweiterten Bereich oberhalb 127. Da sind in Deinen Fonts andere Zeichen als im ASCII oder es gibt einen anderen Standard. Wenn man jedenfalls das Grad-Zeichen haben will "°", hat das den ASCII-Code 176, bzw. 0xB0. Da steht dann beispielsweise im vertikalen 6x8-Font 0x44,0x11,0x44,0x11,0x44,0x11 . Das ist ein schönes Muster, aber kein "°". Andere Zeichen wie ü,ö,ä usw. dito. In sofern würde auch mich interessieren, mit welchem Tool die Schriften gemacht wurden. Ich habe den Fehler gemacht, mir das Programm von microelektronika aus Belgrad zu holen. Das macht aber Header-Dateien, die nur mit deren C-Compiler und dessen mitgelieferten, ansonsten aber geheimem Tools verarbeitet werden können. Das jetzt irgendwie nachzuvollziehen, wie die das abspeichern, ist auch nicht weniger Aufwand, als die Fonts zu Fuß zusammenzusuchen. Tja und da bräuchte ich eben noch diese obere ASCII-Hälfte.
Benedikt K. schrieb: > Der Zeichensatz ist die Codepage 850. Tja BL, wer lesen kann ist klar im Vorteil!
> Der American Standard Code for Information Interchange (ASCII, alternativ > US-ASCII, oft [æski] ausgesprochen) ist eine 7 Bit-Zeichenkodierung; sie > entspricht der US-Variante von ISO 646 und dient als Grundlage für > spätere, auf mehr Bits basierende Kodierungen für Zeichensätze. MfG Klaus
BL schrieb: > Schön zu lesen. Und was bringt das nun? Zusammen mit der Antwort von Klaus: der standard ASCII Zeichensatz hat "nur" 7 bit, d.h. definiert die Zeichen von 0-127. Alles was darüber hinaus geht sind "Sonderzeichen" und unterscheiden sich ggfs. Die "Codepage" gibt dann an, welche Zeichen gemeint sind. Codepage 850 is IMHO eine MS-DOS Codepage. Schau einfach mal http://de.wikipedia.org/wiki/Codepage an.
Ja, das ist mir ja klar. Deshalb fragte ich ja nach dem eventuellen Generator mit dem die Schriftarten gemacht wurden. Was ich meine, ist keine Codepage, die beziehen sich meist auf DOS, sondern Windows 1252. Das aber ist nun mal im Rechner, damit arbeitet der Compiler (CC8e) und im alphanumerischen Display ist dieser Satz auch drin. Da geht es um den erweiterten ASCII-Satz, die Sonderzeichen ab 128 bis 255. Ich habe inzwischen hier was gefunden, was für 6x8 zumindest mir etwas weiterhalf: Beitrag "Re: Character-Sets 5x7 (ASCII) als C-Array?" Darauf hol ich mir gerade zu Fuß raus, was ich gebrauchen kann. Die Zeichen zwischen 128 und 161 fehlen da aber auch. Wer also mit dem Font komplett arbeitet, muß eine Zeigerarithmetik einbauen, sonst haut das auch nicht ganz hin.
BL schrieb: > Was ich meine, ist keine Codepage, die beziehen sich meist auf DOS, > sondern Windows 1252. Das ist natürlich auch eine Codepage, nämlich eben 1252. Wird auch als "ANSI" bezeichnet und ist eng mit ISO8859-1 verwandt. > Das aber ist nun mal im Rechner, Dein Editor arbeitet damit > damit arbeitet der Compiler (CC8e) Der nicht. Dem ist das vollkommen schnurz. > Da geht es um den erweiterten ASCII-Satz, die Sonderzeichen ab 128 bis > 255. Nochmal: Das ist nicht ASCII. Es gibt keinen "erweiterten ASCII-Satz". ASCII ist 7 Bit. Die Ursuppe praktisch jeder anderen Zeichencodierung (von nur aus Informatikvorlesungen her anekdotisch beschriebenen IBM-Perversionen mal abgesehen, aber real begegnet man so etwas nicht), ob nun CP437 (DOS), CP850 (DOS mit ein paar europäischen Sonderzeichen mehr), CP1252 oder auch UTF-8. Du aber suchst einen in ISO8859-1 codierten Font. Alternativ kannst Du auch in deine Zeichenausgaberoutine eine einfache Übersetzungstabelle einbauen -- das ist mit einem Array von 128 Bytes erledigt, wenn vor der Anwendung des Arrays noch auf gesetztes Bit 7 überprüft wird. Und wenn Du meinst, daß da Zeichen fehlen -- die sind schneller selbstgebastelt als Du in einem Forum danach fragst. Nimm 'nen Bleistift, etwas Karopapier und los geht's. Dann ein bisschen Gehirnschmalzübung im Bitmuster-in-Hex-übertragen und fertig ist die Laube. Außerdem: Was für ein Programm auf einem µC benötigt den vollständigen Sonderzeichenumfang? Wer braucht auf einem µC ein ñ, oder ein æ?
Zu letzterer Frage: Wenn man Steuerungstechnik macht, hat man schon mal irgendwelche Sonderzeichen zu verarbeiten. Da kann es auch vorkommen, dass man andere Buchstaben braucht, Dein æ beispielsweise taucht im Dänischen auf. Muß man die Bedienung in anderen Sprachen machen, braucht man sowas ganz schnell und wozu nimmt man ein graphisches Display, wenn man nicht eben die Optik gaz toll machen will/ muß. Zeichen per Kästchenpapier habe ich schon hinter mir, ganze Firmenlogos. Aber den Zeichensatz auf die Art wirklich selber zu machen, hat eher etwas Masochistisches. Mu ich mit nicht unbedingt antun. Ich habe wie oben beschrieben aus diesem anderen Font die fehlenden Zeichen von Ordnungsnummer 128 an genommen und die Sache funktioniert erst mal. Ansonsten haben ich einen "Font and Bitmap Generator" von muGUI.de runtergeladen und der scheint die Arrays zu zusammen zu basteln, wie ich sie brauche. Wenn ich im C-Compiler ein Char '°' angebe -z.B. um es an die LCD-Ausgaberoutine zu übergeben- dann schreibt der mit eine 176 rein. Das ist nach obigem Standard die ASCII-Ordnungszahl für dieses Grad-Zeichen in das List- bzw. Assemblerfile rein. Deshalb halte ich es für sehr viel zielführender, gleich mit dem richtigen Zeichensatz zu arbeiten, als noch Übersetzungsroutinen reinzubasteln. Das ist alles. Meines Wissens -und so finde ich es im Wiki auch- gibt es einen ASCII-Code, der geht seitens der Ordnungszahl von 0 bis 127, also 7 Bit. Dann kam das 8. Bit dazu und das nennt sich dann erweiterter ASCII-Code. Dieser ist mit der -auch unter Wiki- als "Windows-1252" nicht nur im Compiler, sondern auch in fast allen mir bisher unter gekommenen alphanumerischen Displays(bis auf eines, das bestelle ich immer kyrillisch) drin. Aber am Ende ist mit das schnuppe. Hauptsache, mein Dislplay zeigt an, was es soll und die Software paßt am Ende in den PIC. In diesem Sinne: Frohes Schaffen!
Hallo Benedikt, danke für Deine Schriftsammlung. Sie sieht gut aus und hat mir heute viel Arbeit erspart. Viele Grüße Nicolas
:
Bearbeitet durch User
Sieht eher aus als hätte es dir viel Arbeit gemacht (Fehlermeldung) ;)
Nö, eine Fehlermeldung war die schnellste Möglichkeit ein stehendes Bild auf dem Display zu bekommen.
Hallo Benedikt, das ist genial, herzlichen Dank für die große Mühe und die Veröffentlichung!! Möchte gerade den 10x16 Font für ein großes 32x192 Pixel LED-Display verwenden, so eins: http://img.alibaba.com/img/pb/807/999/550/550999807_792.jpg Die Ansteuerung klappt schon, war jetzt auf der Suche nach einer Schriftart, habe Deine göttliche Sammlung gefunden und freue mich tierisch :-) Vg, Conny
Hey, hab das auch grad entdeckt! Sieht cool aus, kann ich sicher brauchen! Die Frage kam schon mal, leider keine Antwort: sind die Files unter irgendeiner Lizenz veröffentlicht? Gilt es bei den dahinterliegenden Fonts (ich nehme mal an die wurden nicht alle händisch gemalt) lizenzrechtlich etwas zu beachten? "gar keine Lizenz" ist irgendwie wenig, nicht mal ein Urheber steht irgendwo drinnen...
Hallo zusammen, ich habe die Schriftarten von Benedikt K. für mein Open-Source GUI Projekt µGUI verwendet. Es ist ideal geeignet um Displays bis zu 7" anzusteuern. Download link: http://www.embeddedlightning.com/ugui/ Viel Spaß damit! Gruß Achim D.
Hallo Zusammen, ich versuche zur Zeit diese Schriften in mein Projekt zu integrieren. Allerdings können die Schriften nicht korrekt angezeigt werden. (Siehe Bild) Egal welches Format der Schriftart ich verwenden. Leider bin ich mit C-Code nicht so vertraut, dass ich mir das erklären könnte. Der Code stammt aus diesem Projekt: https://github.com/stephanel/ST7565-RPi Mit folgendem Code versuche ich die Uhrzeit darzustellen:
1 | ...
|
2 | glcd.drawbitmap(commonX - (myfont_width/2) - (myfont_width*2), commonY, myfont[clock[0]], myfont_width, myfont_height, BLACK); |
3 | glcd.drawbitmap(commonX - (myfont_width/2) - myfont_width, commonY, myfont[clock[1]], myfont_width, myfont_height, BLACK); |
4 | |
5 | if(blink) { |
6 | glcd.drawbitmap(commonX - (myfont_width / 2), commonY, myfont[10], myfont_width, myfont_height, BLACK); |
7 | blink = false; |
8 | } else { |
9 | blink = true; |
10 | }
|
11 | |
12 | glcd.drawbitmap(commonX + (myfont_width/2), commonY, myfont[clock[2]], myfont_width, myfont_height, BLACK); |
13 | glcd.drawbitmap(commonX + (myfont_width/2) + myfont_width, commonY, myfont[clock[3]], myfont_width, myfont_height, BLACK); |
14 | |
15 | ...
|
Der Code, welcher die Schrift darstellt sieht folgendermaßen aus:
1 | void ST7565::drawbitmap(uint8_t x, uint8_t y, |
2 | const uint8_t *bitmap, uint8_t w, uint8_t h, |
3 | uint8_t color) { |
4 | for (uint8_t j=0; j<h; j++) { |
5 | for (uint8_t i=0; i<w; i++ ) { |
6 | if((bitmap[i + (j/8) * w]) & (1<<(j % 8))) { |
7 | my_setpixel(x+i, y+j, color); |
8 | }
|
9 | }
|
10 | }
|
Die Datei myfont enthält nur die Zeichen 0 bis : aus den Schriftarten. Hat jemand eine Idee, woran das liegen könnte?
Das sieht ja grauselig aus. Erwarte bitte nicht, daß unsereiner bei solchem Codegewimmel irgend einen vermutlichen Fehler findet. Muß das so umständlich gehen? Ich hab mir meine eigenen Fonts und auch eigenes GDI geschrieben, was ich nun schon bei allen möglichen µC benutze. Der Aufruf sieht da etwa so aus: const RECT RU = { 78,58,127,71 }; CgFillRect((RECT*)&RU, black); CgStr_at (RU.left+1, RU.top+1, buf, Helvetica_12, white); Das erscheint mir wesentlich handlicher als diese Ungetüme bei dir: "glcd.drawbitmap(commonX + (myfont_width/2), commonY,...." Den zugehörigen Rasteritzer und einige Fonts dazu findest du bei Bedarf hier in der Lernbetty - falls es dich interessieren sollte. Einen kleinen Font-Compiler gibt's dort auch, da kann man sich seine Zeichen quasigrafisch als Textdatei kreieren und damit zur C-Quelle machen. Vielleicht wäre dieses eine Alternative für dich. W.S.
Hi, super Thread. Ich muss gerade statt latin characters, Chinese characters einpflegen, habe aber das Problem das ich dafür nur 500kb habe. Kennt jemand einen pixelfont welcher die notwendigsten Zeichen auf dem bisschen speicher unterbringt? Darf auch etwas kosten, jedoch habe ich hier nur ein Angebot i.H.v. 10.000€ vorliegen, das ist dann doch ein wenig zu viel. Vielen Dank, Felix
Hi, kann es sein, dass die grösseren Fonts kaputt sind? Ich habe hier ein DOGXL240 und das braucht die Daten vertikal. 8x8_vertikal_LSB_1.h hatte ich schon mal auf dem DOGXL160 benutzt und mit dem habe ich auf dem DOGXL240 auch kein Problem. Aber zum Beispiel beim 8x14_vertikal_LSB_1.h kommt nur Pixel-Müll raus. {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00}, // 0x21 Nur mal das Ausrufe-Zeichen. Das ist etwas sehr dünn von den Daten und sieht eher nach horizontal aus. 10x16_vertikal_LSB_1.h: {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x1B,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00}, // 0x21 12x16_vertikal_LSB_1.h {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0xFF,0x33,0xFF,0x33,0 x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x21
Rudolph schrieb: > kann es sein, dass die grösseren Fonts kaputt sind? Nein, die sind gar nicht kaputt, die Daten sind nur nicht so angelegt wie ich das vermutet hatte. {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00}, // 0x21 Ich bin davon ausgegangen, dass die ersten zehn Byte die erste Zeile von dem Zeichen sind, die folgenden zehn Byte die zweite Zeile. Statt dessen gehören aber die ungeraden Bytes zur ersten, die geraden Bytes zur zweiten Zeile.
Hallo, ich habe in der Firma den LCD-Image-Converter kennengelernt. Den kann man kostenlos downloaden. Das Programm konvertiert alle vorhandenen Fonts in C-Code, Font, Fontgröße sowie die Codierung können gewählt werden. Für die Codierung kann die Ausrichtung und eine evtl. Spiegelung gewählt werden (normal werden Pixel zeilenweise von links nach rechts und von oben nach untern codiert, aber alle anderen Kombinationen sind auch möglich, z.B. für ein gedrehtes Display im "Portrait-Mode"), positive oder inverse Darstellung, 1 Bit/Pixel oder Graustufen-/Farbcodierung. Dasselbe ist auch mit Logos, also (kleinen) Bildern möglich. Normal codiiert das Programm den ASCII-Satz mit Codes von 0x20 bis 0x7e. Aber man kann weitere Zeichen hinzufügen (sofern die im Font vorhanden sind) oder auch einige weglassen und z.B. einen kleinen Zeichensatz nur mit Ziffern und evtl. Vorzeichen, Blank, Punkt usw. zu machen. Das Programm ist ziemlich vielseitig und ich habe damit schon einige Fonts und Logos für meine LCDs generiert. Proportionalschrift wird ebenfalls beherrscht, jedes Zeichen hat eine individuelle Breite, die in der Struktur ebenfalls enthalten ist. Bei Monospace-Schriften (z.B. Courier New) ist eben die Breite für alle Zeichen gleich groß. Den erzeugten Code kann man natürlich nachher noch ändern, wenn bei kleinen Auflösungen einige Zeichen nicht gut aussehen oder man den Code für einige Sonderzeichen ändern will. Gruß Andy
Andreas W. schrieb: > ich habe in der Firma den LCD-Image-Converter kennengelernt. Den kann > man kostenlos downloaden. Bei allem Lob Deinerseits hats für 'nen Link anscheinend nicht mehr gereicht. Vermutlich meinst Du das hier: http://sourceforge.net/projects/lcd-image-converter/
Auf die Gefahr hin ausgelacht zu werden, frag ich einfach trotzdem mal. Also erstmal vielen Dank an Benedikt, der das vor Jahren online gestellt hat. Ich bring mir selber ein bisschen c++ bei, und hab "von Hand" einen font mit wenigen Pixeln geschrieben (einfach so als Übung, und um in meinen opengl Programmen eine Schriftfunktion zu haben, die ich auch verstehe) Ich hab jetzt mal die 10x16 horizontal, gespiegelt (ehrlich gesagt weiss ich auch nicht, warum es mir die ungespiegelte als gespiegelt anzeigt, aber egal), 1, genommen und schreib gerade eine Funktion, die das in meine Struktur übersetzt. Ich schreib jetzt gerade eine Korrekturfunktion, aber sehe ich das richtig, dass die letzten 2 Bits pro Zeile eigentlich an den Anfang gehören? (verwende die 3. Font-Version) Kann natürlich auch sein, dass meine Auslese-loops irgendwie falsch sind, aber ich hatte eigentlich das Gefühl, dass ich die Struktur begriffen hab. Lustigerweise hab ich zuerst von Hand von der ersten Version die ungespiegelte Variante genommen, und beim "A" nicht gemerkt, dass es spiegelverkehrt ist. Und mir dann gedacht "ok, die letzten 6 bits brauchts nicht, sind aber halt drin, damits in der hex-Formulierung geht".
ich glaube ich verstehe es nicht. Benedikt K. schrieb: > #include "6x8_horizontal_LSB_1.h" > > void writechar(unsigned char c) > { unsigned char x,y,w; > for (y=0; y<8; y++) > { w=font[c][y]; > for (x=0; x<6; x++) > { if (w&1) > setpixel(x,y); > else > clrpixel(x,y); > w=w>>1; > } > } > } Wie kann ich damit einen großen Font wie den 12x24 ausgeben? Hilft mir jemand mit dem Code? Merci.
Beitrag #5668952 wurde von einem Moderator gelöscht.
Beitrag #5758136 wurde von einem Moderator gelöscht.
Beitrag #5835818 wurde von einem Moderator gelöscht.
Beitrag #5844388 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.