当前位置:C++技术网 > 资讯 > 字体轮廓的平滑处理

字体轮廓的平滑处理

更新时间:2015-11-30 21:54:42浏览次数:1+次

通常,在输出文本时,如果文字的字形比较大,字体的转折处会有明显的"锯齿"现象。windows2000以后的版本操作系统都支持在字体输出显示输出时的
字体轮廓的处理,这种字体轮廓平滑处理的过程称为"抗锯齿“(AntiAlias).
Graphcics类的成员函数GetTextRenderingHint(获取字体的边缘处理方式)和SetTextRenderingHint函数(设置字体的边缘处理方式)完成了查询和设置字体边缘

处理方法的功能。这两个函数的调用格式如下:

TextRenderingHint GetTextRenderingHint(void) const;
Status SetTextRenderingHint(TextRenderingHint newMode);
参数newMode指明了需要采用的边缘处理方法,其值是由枚举TextRenderingHint列出的下列成员之一:
enum TextRenderingHint{
TextRenderingHintSystemDefault,
		TextRenderingHintSingBitPerPixelGridFit,
		TextRenderingHintSingBitPerPixel,
		TextRenderingHIntAntiAliasGridFit,
		TextRenderingHintAntiAlias,
		TextRenderingHintClearTypeGridFit
};
新建GDI+程序项目,这是一个单文档项目,在菜单中新建一个菜单项“字体边缘处理”,在这个菜单项下新建一个子菜单项“字体轮廓设置”,并建立消息响应:
void CTextRanderingView::OnTextrenderhint()
{
	// TODO:  在此添加命令处理程序代码
	Graphics graphics(this->m_hWnd);
	this->RedrawWindow();
	FontFamily fontfamily(L"Arial");
	Gdiplus::Font font(&fontfamily, 60, FontStyleRegular, UnitPixel);

	int RenderingHint[] = {
		TextRenderingHintSystemDefault,//////使用与系统相同的处理方式
		TextRenderingHintSingleBitPerPixelGridFit,//////不消除锯齿,使用网格匹配
		TextRenderingHintSingleBitPerPixel,//////不消除锯齿,不使用网格匹配
		TextRenderingHintAntiAliasGridFit,//////消除锯齿,使用网格匹配
		TextRenderingHintAntiAlias,////////消除锯齿,不使用网格匹配
		TextRenderingHintClearTypeGridFit///////在液晶显示器上是使用cleartype技术增强字体清晰度
	};
	////////使用不同的边缘处理方式输出6行文本
	for (int i = 0; i<6; i++)
	{
		/////设置边缘处理方式
		graphics.SetTextRenderingHint((TextRenderingHint)RenderingHint[i]);
		/////输出文本
		graphics.DrawString(L"Render", -1, &font, PointF(0, 0), &SolidBrush(Color(255, 0, 0, 0)));
		/////绘图平面下移1行
		graphics.TranslateTransform(0, font.GetHeight(0.0f));
		int n = font.GetHeight(0.0f);
	}
}
代码实现:

你用图片编辑软件放大看看后就知道效果了。试试吧!

上面的是未消除锯齿的,下面的是消除锯齿的。你会发现,最后得”r“的TextRenderingHintClearTypeGridFit处理效果最好。

cleartype是微软系统特有的图片处理技术。你可以自己查查。