分享
 
 
 

带阴影文字输出的实现

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

带阴影文字输出的实现

作者:李昊

下载源代码

一、正文

用GDI+的优秀图形输出功能可以非常方便的实现文字特效,其中一个带阴影的文字便是其中一例。

许多简单的文字特效只是简单的将文字用不同的颜色与不同的位置输出一次或多次,本文所讨论的阴影效果借助GDI+的反走样能力生成透明的阴影与半阴影。

这儿所述的方法先在绘图平面上绘制一个比预期小的文字。然后放大它。

步骤:

创建内存位图,设它的长宽为当前窗口的几分之几(此例中我取当前窗口的1/4);

创建一个矩阵,使字体为原来的1/4,阴影距离也为你要设置文本的1/4;

在位图上绘制文本,设置绘制模式为反走样模式,创建一个有透明度的画笔(比如50%透明)。记住我们新创建的内存位图都为100%透明,因此我们所加入不完全透明的位

在绘制时将呈现出艺术效果;

把位图显示在屏幕上,在两个方向上都放大4倍,插值模式为高质量双三次插值法,插值法非常重要,因为双三次插值使文本的边模糊,这样就出现阴影与半影效果;

最后,把文本绘制到绘图平面上,设置绘制模式为反走样模式以保证正确的范围;

二、代码说明请使用

void CDropShadowEffectTextView::OnDraw(CDC* pDC)

{

using namespace Gdiplus;

CDropShadowEffectTextDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

CRect ClientRect;

GetClientRect(&ClientRect);

CSize ClientSize(ClientRect.Width(),ClientRect.Height());

RectF theRect(ClientRect.left,ClientRect.top,ClientRect.Width(),ClientRect.Height());

PointF textPos(10, ClientSize.cy/3);

CStringW text("文字阴影特效");

FontFamily fontFamily(L"Times New Roman");

Font font(&fontFamily, 100, FontStyleBold, UnitPixel);

Graphics g(pDC-m_hDC);

LinearGradientBrush b(theRect,Color::Blue,Color::AliceBlue,90.0f);

g.FillRectangle(&b,theRect);

//Make a small bitmap

Bitmap bm(ClientSize.cx/4,ClientSize.cy/4,&g);

//Get a graphics object for it

Graphics* bmpg = Graphics::FromImage(&bm);

// must use an antialiased rendering hint

bmpg-SetTextRenderingHint(TextRenderingHintAntiAlias);

//this matrix zooms the text out to 1/4 size and offsets it by a little right and down

Matrix mx(0.25f,0,0,0.25f,3,3);

bmpg-SetTransform(&mx);

//The shadow is drawn

bmpg-DrawString(text,-1,&font,textPos,NULL,&SolidBrush(Color(128, 0,0,0)));

//The destination Graphics uses a high quality mode

g.SetInterpolationMode(InterpolationModeHighQualityBicubic);

//and draws antialiased text for accurate fitting

g.SetTextRenderingHint(TextRenderingHintAntiAlias);

//The small image is blown up to fill the main client rectangle

g.DrawImage(&bm,theRect,0,0,bm.GetWidth(),bm.GetHeight(),UnitPixel);

//finally, the text is drawn on top

g.DrawString(text,-1,&font,textPos,NULL,&SolidBrush(Color::White));

}

三、效果图

效果图(jpeg的效果不如程序中的好)

四、结束语

关于怎么在VS2003中如何使用GDI+请参考我以前的文章:

GDI+编程基础(一)GDI+ Vs GDI

GDI+编程(二)使用画笔

本作者熟悉C++/MFC,熟悉GDI/GDI+,英文文档翻译,接做文档翻译,小型系统开发,技术难题突破等,Email:realman1981@sohu.com,电话:13679278016

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有