AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TrueTypeFont Rastern
Thema durchsuchen
Ansicht
Themen-Optionen

TrueTypeFont Rastern

Offene Frage von "bidi"
Ein Thema von bidi · begonnen am 19. Feb 2007 · letzter Beitrag vom 19. Feb 2007
 
bidi

Registriert seit: 30. Jan 2005
16 Beiträge
 
#1

TrueTypeFont Rastern

  Alt 19. Feb 2007, 01:44
Hallo!

Ich arbeite zur Zeit an einem Programm, das PCL6 (bzw. PCL XL) Code für einen Drucker erzeugt. Dazu muss ich Schriftarten; besser: Zeichen als Bitmap übertragen. d.h. 1 = schwarz, 0 = weiss ...soweit ganz einfach.
Ich habe versucht in ein TCanvas mittels TextOut einfach einen Buchstaben zu zeichnen und anschließend das Bild mittels Schleife und der Pixels-Eigentschaft in das gewünscht Fortmat zu bringen. Hat soweiter auch funktioniert.

Aber: Das Programm soll später ein Konstolen-Anwendung werden. Und da funktioniert das mit dem Canvas nicht, da ja nix gezeichnet wird... Außerdem muss es wahrscheinlich nach FreePascal unter Linux portiert werden. Also das bitte im Hinterkopf behalten.
Hier mein aktueller Code, der nat. nur funktioniert, wenn die Bitmap z.B. in einem TImage auf einem Form gezeichnet wird:

Delphi-Quellcode:
function TPCLGen.RasterChar(c: Char; Height: Cardinal): TByteArray;
var
  PLeftOffset, PRightOffset, Pwidth, Pheight: ^Word;
  bm: TBitmap;
  x,y: Cardinal;
  data: Byte;
  shift: Integer;
begin
  SetLength(result, 10);
  result[0] := $00; // Format = 0;
  result[1] := $00; // Class = 0;

  PLeftOffset := @result[2];
  PLeftOffset^ := 0;

  PRightOffset := @result[4];
  PRightOffset^ := 0;

  Pwidth := @result[6];
  Pheight := @result[8];

  bm := TBitmap.Create;
  try
    bm.Canvas.Font.Name := 'Arial';
    bm.Canvas.Font.Height := Height;

    Pheight^ := bm.Canvas.TextHeight(c);
    Pwidth^ := bm.Canvas.TextWidth(c);

    bm.Height := Pheight^;
    bm.Width := Pwidth^;

    bm.Canvas.Pen.Color := clBlack;
    bm.Canvas.TextOut(0,0,c);

    shift := 7;
    data := 0;
    for x:=0 to Pwidth^-1 do
      for y:=0 to Pheight^-1 do
      begin
        if shift = -1 then
        begin
          SetLength(result,Length(result)+1);
          result[High(result)] := data;
          shift := 7;
          data := 0;
        end;
        if bm.Canvas.Pixels[x,y] <> clWhite then
          data := data and (1 shr shift);
        dec(shift);
      end;
    SetLength(result,Length(result)+1);
    result[High(result)] := data;
    bm.Canvas.Free;
  except
    bm.Canvas.Free;
    SetLength(result,0);
  end;
end;
Wer hat nun eine Idee wie ich es dennoch gebacken Bekomme? Ich habe noch an Bitmap.SaveToStream gedacht... aber beim Windows-Bitmap-Format ist dann soviel Bit-Zauberei notwendig... das nervt. Und wie ich damit dann unter Linux da stehe ist auch noch unklar.
Vorschläge sind also gefragt!

Soweit schonmal vielen Dank,
sascha
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 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 by Thomas Breitkreuz