高分求解:如何显示矢量汉字 (200分)

  • 主题发起人 主题发起人 lxh90101
  • 开始时间 开始时间
L

lxh90101

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(][:(!][red][/red][h1][/h1]我想在form1.canvas的一个位置显示旋转汉字,用canvas.textout输出的汉字有锯齿,给汉字旋转后特别难看,特别是小字,大家也许见过Freehand或Illustrator等矢量编辑软件中汉字不论如何操作都非常漂亮,怎么做出来的?
网上我见过平滑字体的控件,是需要一些运算平滑字体的边缘,Truetype字显示出来的都带锯齿,有没有好办法?难道矢量字只有这个效果吗?那位高手对此有研究,请不吝赐教!
 
windows用的就是TrueType字体
 
高手们都忙什么去了,分数少我可以再加,只要答案对头!
 
好像有个AAFont的组件可以平滑显示, 看它怎么做的
 
TMeteFile,用矢量图啊,怎么放大都可以!
 
请问那里有Tmetafile方面作矢量图的资料呀?
 
找一套矢量汉字库(如AUTOCAD带的矢量汉字库),读取汉字显示数据,
设计一个程序,再将矢量汉字在canvas上把字“画”出来,画的时候可以
考虑大小、角度等,不用考虑平滑问题。
 
MyMetaFile:TMetaFile;
pCanvas:TMetafileCanvas;

MyMetafile := TMetafile.Create;
MyMetaFile.Width:=PaintBox1.Width;
MyMetaFile.Height:=PaintBox1.Height;
MyMetaFile.Transparent:=true;
MyMetafile.Enhanced:=true;
pCanvas:= TMetafileCanvas.Create(MyMetafile, 0);
with pCanvas do
try
Pen.Style:=psSolid;//psdot;
Pen.Width:=1;
Pen.Color:=clGreen;
MoveTo(10,20);
LineTo(100,200);//Pixels[30,40]:=clRed;
TextOut(40,60,'Hello');
finally
Free;
end;
PaintBox1.Canvas.Draw(0,0,MyMetafile);
以上是显示
一下是打印
procedure TForm1.PrintFigButton1Click(Sender: TObject);
var
PrintHeight,PrintWidth:double;
begin
Printer.BeginDoc;
if(bStretch)then//bStretch确定打印的时候是否伸缩,全局变量
begin
PrintHeight:=round(Printer.PageHeight/2.5);
PrintWidth:=PrintHeight*fScale;//fScale,伸缩系数,全局变量
Printer.Canvas.Font:=Font;
Printer.Canvas.Font.Size:=11;
Printer.Canvas.StretchDraw(Rect(0,0,Trunc(PrintWidth),Trunc(PrintHeight)),MyMetaFile);
end
else
begin
Printer.Canvas.Font:=Font;
Printer.Canvas.Font.Size:=11;
Printer.Canvas.Draw(40,40,MyMetaFile);
end;
Printer.EndDoc;
end;

 
在PaintBox1显示的代码不完整,大体意思即使如此,另外TMetaFile也要free,你自己补充吧
 
多人接受答案了。
 
后退
顶部