如何实现将矢量字库在后台转化为点阵信息?比如“大”宋体,12号字,粗体,转化为0011010....,提个思路也行。(100分)

  • 主题发起人 主题发起人 macrowdw
  • 开始时间 开始时间
M

macrowdw

Unregistered / Unconfirmed
GUEST, unregistred user!
我的思路是
先设好TCanvas.Font
再TCanvas.Textout(0,0,'大'),
最后for i:=0 to TextWeidth do
for j:=0 to TextHeight do
读出点的信息,
但是TCanvas选择什么样的载体?一般的载体在TextOut时需可视,
请大家提个思路!
 
可用TBitmap,设置PixelFormat := pf1bit(黑白)。
TBitmap.Canvas。
 
我试了一下,用Image可以,既然用一个面板完全遮住它也行
var
I,J:Integer;
Tw,Th:Integer;//字体宽和高
TArr:Array[0..99,0.99] of array;
begin
Image1.Canvas.Font.Size:=60;
Image1.Canvas.Font.Name:='宋体';
Image1.Canvas.TextOut(0,0,'大');
Image1.Canvas.Brush.Color:=clwhite;
TW:=Image1.Canvas.TextWidth('大');
TH:=Image1.Canvas.TextHeight('大');
For I:=0 to Tw-1 do
For J:=0 to TW-1 do
begin
If GetPixel(image1.Canvas.handle,i,j)=Image1.Canvas.brush.Color then
TArr[J]:=0
Else
TArr[J]:=1;
end;
我把得到的数组用Setpixel可以在另一个Image把字再画出来。至于二维数组转换成一维,应该很容易了。
 
to AKang:
可是我要在函数中实现,不想在窗口中显示出来,所以用image就不可以了,因为不显示出来的
话,Textout就会报错。
to Huzzz
我也试了一下Tbitmap,但是TextOut后,读出的点的颜色值为-1,不知为什么?
 
不可能吧,你是怎么读的?
 
大概你没有设置Bitmap的宽度和高度吧。
你试试:

procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
S : String;
function GetBinStr: String;
var
X,Y: Integer;
begin
Result :='';
for Y := 1 to 20 do
begin
for X := 1 to 20 do
if Bmp.Canvas.Pixels[X,Y]=0 then
Result := Result + '1'
else
Result := Result + '0';
Result := Result + #13;
end;
end;
begin
Bmp := TBitmap.Create;
try
Bmp.Width := 100;
Bmp.Height := 100;
Bmp.PixelFormat := pf1bit;
with Bmp.Canvas do
begin
Brush.Color:=clwhite;
Brush.Style := bsSolid;
FillRect(ClipRect);

Font.Height:=-12;
Font.Name:='宋体';
TextOut(0,0,'大');

S := Format('%d, %d, %d, %d',[Pixels[1,1],Pixels[2,2],Pixels[3,3],Pixels[4,4]]);
ShowMessage(S);
S := GetBinStr;
ShowMessage(S);
end;
finally
Bmp.Free;
end;
end;
 
多人接受答案了。
 
后退
顶部