VC三两句话实现字体描边和空心效果

 

来源:http://www.vcfans.com/2008/12/vc-a-couple-of-words-to-achieve-the-effect-of-hollow-characters-and-stroke.html

 

最近的项目需要对字体进行描边,也就是将字体缕空。为了实现不同桌面背景图使字体看上去清楚,目前通用的解决方案就是将字体描边。关键现在这款芯片 的GUI开发包功能比较弱,一些特殊效都需要自己手动实现,汗。要实现这个效果的第一个想到的解决方案就是将系统字体的点阵取出,进行边缘检测出来,进行 处理,运算的开销不小,而且处理起来麻烦,国际化也是个麻烦。

在罗大侠的指点的下(为罗大侠能想出这种歪注意表示万分感谢),想到了一个好的方法。只需写一个描边函数即可,实现相当容易。我在PC下做了一份,效果如下图:

主要实现思路是用背景色将要显示的字体按偏移刷8遍(为了方便算法的实现,我在下面的代码中刷了9遍),最后将前景的字体再刷一遍。实现代码:

void CshadowfontView::DrawShadow(CDC *pDC, CString & str, COLORREF clrTxt, COLORREF clrBG, int x, int y)
{ if( pDC == NULL ) return;

CPen pen;
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor( clrBG );
for (int i=0; i < 3; i++)
{ for (int j=0; j < 3; j++)
{
pDC->TextOut(x+i, y+j, str);
}
}
pDC->SetTextColor( clrTxt );
pDC->TextOut(x+1, y+1, str);
}

测试了CreateFont的画圈效果:

代码下载:

shadowfont.7z (18.0 KiB, 254 hits)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值