最近的项目需要对字体进行描边,也就是将字体缕空。为了实现不同桌面背景图使字体看上去清楚,目前通用的解决方案就是将字体描边。关键现在这款芯片 的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)