![]() |
Zeichenfont ausgeben - wie? (Verständnisfrage)
Hallo!
Ich habe einen Font 8x16, um ein Beispiel zu geben. Dieser sei in einer Datei pixelweise gespeichert. Ein Array wäre dafür: type TFont8x16 = array[0..4095] of byte; Schließlich müssen die Schriftzeichen in der Datei auch byteweise abgelegt werden, damit sich deren Aussehen vom BIOS Zeichensatz unterscheidet, abgesehen davon, das auch der Zeichensatz im ROM letzlich aus Bitmustern besteht. Wie wird so ein Font nun ausgegeben? Ich habe folgenden Ansatz:
Delphi-Quellcode:
Und Hier -> PutPixel:
type
TFont8x16 = array[0..4095] of byte; procedure OutChars; var i,ix,iy,m,n: Integer; chars: array[0..255] of array[0..7,0..15] of byte; //Eine Möglichkeit Font: TFont8x16; begin move(Font,chars,sizeof(charSet8x16)); ix := 0; n := 0; iy := 0; m := 0; for i := 0 to sizeof(charset8x16)-1 do begin //chars[ch,ix,iy]; ix := (i mod 8) + n; PutPixelXY(ix,iy,Font[i],color); inc(iy); if (iy mod 16) = 0 then begin inc(n,8); iy := 0; end; end; end;
Delphi-Quellcode:
Die Sache mit der Bitnummer wegzulassen, bringt auch nichts. In welchem Format sind solche Fonts gespeichert und wie gibt man sie aus?
procedure putpixel();
var Bitnum: Integer; begin for num := 0 to 7 do if IsBitTrue(pixel,num) then Bildspeicher[X + Y * XRes] := VordergrundFarbe else Bildspeicher[X + Y * XRes] := HintergrundFarbe; end; end; Wer kann helfen? profmaster |
Re: Zeichenfont ausgeben - wie? (Verständnisfrage)
Hallo!
Mit OutText krigst Du das doch automatisch. Gibt es in jeder vernünftigen Grafikbibliothek! Progcoder |
Re: Zeichenfont ausgeben - wie? (Verständnisfrage)
Hallo!
Zitat:
Delphi-Quellcode:
Rafft das einer? Hab mich mit Low Level Grfikprogrammierung lange nich mehr beschäftigt und muss wohl was nachholen! Ich könnte zwar diese fertige Prozedur einfach nehmen und weitermachen, aber wozu gibt es dann OpenSource? Hab deswegen oben, als ich das Thema begonnen habe, ne eigene Version geschrieben, die aber nicht läuft. Hab die eigene Version in der Hoffnung geschrieben, dann diesen Quelltext hier besser zu versteheen und weil ich eine Grafikbibliothek optimieren will/muss, und dazu muß ich nun mal den bisherigen Ablauf verstehen
//Die Kommentare sind von mir und beschreiben MEIN bisheriges Verständnis des Ablaufes!
PROCEDURE Outtextxy(Dest:VirtualWindow;x,y:LongInt;r,g,b:Word;Ketten:String); VAR q,q2,q3,q4,q5,q6,q7 : Byte; Begin ypos1:=y; //YPosition festlegen q6 :=length(ketten); //Stringlänge zwischenspeichern xpos1:=x+q6*(textsize shl 3); // ??? Was macht die Berechnung? q7 :=textsize-1; For q:= 1 to q6 do begin For q2:= 0 to 7 do //Ausgabe 7 Byte als je ein Pixel vorbereiten begin //Dann Zwischenvariable als String mit Einsen, wo Bitmuster für Zeichen Kette:=DezToBin(FontVariable[(ord(Ketten[q]) shl 3)+q2]); //Warum ..shl 3? For q3:=0 to 7 do If Kette[q3+1]='1' then // ?? for q4:=0 to q7 do // ?? raff ich gar nich for q5:=0 to q7 do // ?? PutPixel(Dest,x+q5+q3*textsize+(q-1)*(textsize shl 3),y+q4+(q2*textsize),r,g,b); //Die Berechnung in PutPixel raff ich auch nicht. end; end; End; Vielleicht sollte ich auch jezt einfach Scluss machen und nach der Nachtruhe diesen Quelltext noch mal anschauen. Werd ich jetz auch tun, Gute Nacht profmaster P.S. Hab bei der Outtextxy Procedure die Fontdefinition jetzt auf die Schnelle nicht rausgesucht, hoffe aber das das Anlegen der Bitmuster eh standardisiert ist. Muß ich etwa erst meine Fontdefinition mit meinem BIOS Zeichengenerator verbinden, bevor die meinige Version funzt? Egal, morgen ist auch noch ein Tag! |
Re: Zeichenfont ausgeben - wie? (Verständnisfrage)
Hab's rausgekrigt, wie's geht.
Tja, oberste Regel beim Programmieren: Programmiere nie nach einer Party, wenn du dort was getrunken hast. Das erste [0..7] weggelassen in meinem ersten Beitrag bei der Felddimension und: BUMM -> es funzt, wie gewollt. Danke für Eure vielen Antworten. Profmaster |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz