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