当前位置:C++技术网 > 资讯 > 文字特效处理原理解析

文字特效处理原理解析

更新时间:2015-11-30 22:08:08浏览次数:1+次

常见的文字处理软件都支持对阴影字或者立体字的特效处理。这两种特效的实现原理都很简单;在不同的位置使用不同色彩的画刷输出相同的文本。在对阴影进行处理时,可以使用纯色的处理,还可以使用线条。让线条作为阴影,简单的方法就是使用影线画刷填充背景。下面,代码实现这种字体特效的实现过程。

新建GDI+工程,在菜单项中新建一个菜单项”文字特效“,并在下面新建一个子菜单项”阴影特效",建立消息响应:

void CTextRanderingView::OnShadow()
{
	// TODO:  在此添加命令处理程序代码
	Graphics graphics(this->m_hWnd);
	//this->RedrawWindow();
	FontFamily fontFamily(L"Arial");
	Gdiplus::Font font(&fontFamily, 100, FontStyleBold, UnitPixel);
	CRect rect;
	this->GetClientRect(&rect);
	//////文本输出框
	RectF textout(font.GetHeight(0.0), rect.Height() / 2, rect.Width(), rect.Height());
	////////在两个不同的位置绘制文本,形成阴影
	graphics.SetTextRenderingHint(TextRenderingHint(0));
	//////soilidbrush的色彩透明度为100,暗黑
	SolidBrush solidbrush(Color(100, 0, 0, 0));
	SolidBrush redbrush(Color(255, 255, 0, 0));
	graphics.DrawString(L"阴影字", 6, &font, PointF(27.0f, 27.0f), &solidbrush);
	graphics.DrawString(L"阴影字", 6, &font, PointF(12.0f, 20.0f), &redbrush);
	/////另一种阴影字,阴影委=为线条
	////构造影线画刷
	HatchBrush brush_tmp(HatchStyle(2), Color::Black, Color::White);
	int reptime = 40;
	/////先画背景
	for (int i = 0; i < reptime; i++)
	{
		graphics.DrawString(L"阴影字", 6, &font, PointF(textout.X + i + 2, textout.Y + i + 2), &brush_tmp);
	}
	/////再画前景
	graphics.DrawString(L"阴影字", 6, &font, PointF(textout.X, textout.Y), &SolidBrush(Color::Red));
}

代码实现: