Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeichenfont ausgeben - wie? (Verständnisfrage) (https://www.delphipraxis.net/57753-zeichenfont-ausgeben-wie-verstaendnisfrage.html)

profmaster 25. Nov 2005 20:46


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:
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;
Und Hier -> PutPixel:

Delphi-Quellcode:
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;
Die Sache mit der Bitnummer wegzulassen, bringt auch nichts. In welchem Format sind solche Fonts gespeichert und wie gibt man sie aus?

Wer kann helfen?

profmaster

Progcoder 25. Nov 2005 23:28

Re: Zeichenfont ausgeben - wie? (Verständnisfrage)
 
Hallo!

Mit OutText krigst Du das doch automatisch. Gibt es in jeder vernünftigen Grafikbibliothek!

Progcoder

profmaster 25. Nov 2005 23:54

Re: Zeichenfont ausgeben - wie? (Verständnisfrage)
 
Hallo!

Zitat:

Zitat von progcoder
Mit OutText krigst Du das doch automatisch. Gibt es in jeder vernünftigen Grafikbibliothek!

Richtig, aber wie machen die das. Hab hier folgendes gefunden. Entwerder es liegt an der fortgeschrittenen Zeit, oder ich raff wirklich irgendwas nich.

Delphi-Quellcode:
//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;
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
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!

profmaster 28. Nov 2005 11:59

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 05:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz