TextOut 如何做平滑处理? ( 积分: 100 )

  • 主题发起人 主题发起人 smithcouple
  • 开始时间 开始时间
S

smithcouple

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是我临时写的一段程序,功能就是把自己绘的图元文件复制到剪贴版里,以便在Word中粘贴使用:

procedure TForm1.Button1Click(Sender: TObject);
var
Mfile : TMetafile;
MC: TMetafileCanvas;
MyFormat : Word;
AData : THandle;
APalette : HPalette;
begin
Clipboard.Open;
try
MyFormat := CF_ENHMETAFILE;
Mfile := TMetafile.Create;
Mfile.Enhanced := true;
Mfile.Width := 100;
Mfile.Height := 100;
MC := TMetafileCanvas.Create(Mfile, 0);
with MC do
begin
Font := Self.Font;
Ellipse(0,0,100,100);
TextOut(50,50,'Width');
Free;
end;
Mfile.SaveToClipboardFormat(MyFormat, Adata, Apalette);
Clipboard.Assign(Mfile);
try
Image1.Picture.LoadFromClipboardFormat(MyFormat, Adata, Apalette);
except
on EInvalidGraphic do
RaiseLastOSError;
end;
finally
Clipboard.Close;
end;
end;


画了一个圆,又写了'Width'字符串
问题来了

当我只画图形(直线 弧线 圆 矩形等)的时候,当我在Word中粘贴程序copy到剪贴板的图元图形时,Word对于此图形自动开启了"ClearType"模式,也就是平滑了图像线条边缘。

但当我加入TextOut(50,50,'Width');后,此时既有图形也有文本,这是我再在Word中粘贴,发现粘贴来的图像并不是平滑的了,而是有锯齿的。
此时若在Word中右键单击图形,选择“编辑图片”,整个图像又立刻被平滑了。。。

可见是因为有TextOut的缘故,但我的程序生成的图像是带文本的,我现在希望Word照样也能自动将其平滑。我也常是直接用Win32 API,结果还是一眼,带锯齿的。是否还有什么地方没有注意?比如MMWidth?请各位大虾帮忙看看,谢谢!

图片在这里:
2005114231853855.jpg
 
以下是我临时写的一段程序,功能就是把自己绘的图元文件复制到剪贴版里,以便在Word中粘贴使用:

procedure TForm1.Button1Click(Sender: TObject);
var
Mfile : TMetafile;
MC: TMetafileCanvas;
MyFormat : Word;
AData : THandle;
APalette : HPalette;
begin
Clipboard.Open;
try
MyFormat := CF_ENHMETAFILE;
Mfile := TMetafile.Create;
Mfile.Enhanced := true;
Mfile.Width := 100;
Mfile.Height := 100;
MC := TMetafileCanvas.Create(Mfile, 0);
with MC do
begin
Font := Self.Font;
Ellipse(0,0,100,100);
TextOut(50,50,'Width');
Free;
end;
Mfile.SaveToClipboardFormat(MyFormat, Adata, Apalette);
Clipboard.Assign(Mfile);
try
Image1.Picture.LoadFromClipboardFormat(MyFormat, Adata, Apalette);
except
on EInvalidGraphic do
RaiseLastOSError;
end;
finally
Clipboard.Close;
end;
end;


画了一个圆,又写了'Width'字符串
问题来了

当我只画图形(直线 弧线 圆 矩形等)的时候,当我在Word中粘贴程序copy到剪贴板的图元图形时,Word对于此图形自动开启了"ClearType"模式,也就是平滑了图像线条边缘。

但当我加入TextOut(50,50,'Width');后,此时既有图形也有文本,这是我再在Word中粘贴,发现粘贴来的图像并不是平滑的了,而是有锯齿的。
此时若在Word中右键单击图形,选择“编辑图片”,整个图像又立刻被平滑了。。。

可见是因为有TextOut的缘故,但我的程序生成的图像是带文本的,我现在希望Word照样也能自动将其平滑。我也常是直接用Win32 API,结果还是一眼,带锯齿的。是否还有什么地方没有注意?比如MMWidth?请各位大虾帮忙看看,谢谢!

图片在这里:
2005114231853855.jpg
 
有没有人会TIF图片倾斜校正和去黑边的啊?我以在论坛里提出问题了!~请高手们回答!~谢谢!
 
Font := Self.Font;

ClearType 需要字体支持吧 换一种支持ClearType的字体
就是字体前面有个C图标的那种 还有一种前面有T图标的 那是TrueType字体
 
to Genl

我只看到O图标的,应该是?OpenType 还有就是TrueType 并没有C图标
我改成了Arial(这种字体肯定支持ClearType),但还是没有用。

我感觉是不是Delphi的TCanvas.TextOut封装的有些问题,我看了pas源代码,也没有头绪
 
后退
顶部