带阴影文字输出的实现

一、正文

用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));
}

时间: 2024-09-17 04:56:11

带阴影文字输出的实现的相关文章

使用GD库生成带阴影文字的图片

这篇文章主要介绍了使用GD库生成带阴影文字的图片的方法,非常的细致,推荐给大家,需要的朋友可以参考下 最近使用GD库来进行微信公共账号的图片生成,研究了一下GD库文字阴影效果的生成同时也发现了GD库的强大. GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等. GD库的安装什么的网上都有,现在很多虚拟空间也都支持,这里就不再赘述.

带光圈文字输出的实现

你可能会认为生成一个带柔和阴影的特效文字与生成一个带光圈的特效文字是完全不 同的,其实他们所用到的技术是完全相同的,只是在设置上有些许变化. 在带柔和阴影 的效果中,我用到了GDI+中的一些插值模式来生成模糊的文字轮廓,当位图绘制平面放大 时,插值模式决定原来某点像素应该怎样和周围的融合. 低质量的插值只是简单的把一 个像素变换成同色色块,高质量插值如高质量双线性插值与高质量双三次插值会考虑像素 色的平滑与反走样,我发现高质量双线 性插值模式最好. 这个技术把文字绘制两次,一次在一个小位图上绘制

使用GD库生成带阴影文字的图片_php技巧

最近使用GD库来进行微信公共账号的图片生成,研究了一下GD库文字阴影效果的生成同时也发现了GD库的强大. GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等. GD库的安装什么的网上都有,现在很多虚拟空间也都支持,这里就不再赘述.下面通过我实际应用代码的实例和相关的注释为大家介绍一下GD库的使用方法. 原图: 生成效果图: 代码如

PS抠图:怎么扣出带阴影的鞋子?

  PS抠图:怎么扣出带阴影的鞋子?          1.打开一个商品图 2.鞋子的白色部分和背景区别不明显,不利于抠图,所以复制当前图层,更改混合模式为正片叠体.图像变暗了. 3.用钢笔工具抠出来,转为选区 4.CTRL+J复制,删除下面的一个图层,因为有两个是一样的吗. 5.在抠出的球鞋图层下,新建一个图层,填白色 6.关闭白色图层,选中背景 7.点击背景图层,按CTRL+ALT+~,这时选取的是图像的高两部分,反选一下啊,就是阴影了 8.CTRL+J,复制出阴影图层 9.换一个明显一些的

金山wps制作带圈数字字符、带圈文字

  参考教程: WPS文字中带圈字符使用小妙招 金山文字2005中的带圈字符功能最多可支持制作两个汉字的带圈文字(如首图所示,Word 2003只支持一个汉字),支持两个英文字符,数字最大支持到99.这远远不能满足我们日常办公的需要,即便是这样,我们也会发现,只要输入的文字是两位或者输入的字母中含有大写字母,生成的带圈字符就有超出"圆圈"的现象,严重影响了美观和整体效果,对于普通用户来说,直接调整带圈字符的字号是不能解决这一问题的,以下是笔者所做的一些尝试: 1. 制作一个如图1所示的

金山wps制作带圈数字字符、带圈文字的方法

  金山wps制作带圈数字字符.带圈文字的方法.可能很多网友在浏览文档的时候,都看过带圈的数字字符,不过,都+不知道怎么插入这样的带圈的数字字符,在今天的金山wps教程中,我们就专门来讲一下带圈符号的制作方法,不仅仅可以制作带圈数字符号,还可以制作带圈文字,一起来看看是怎么办到的吧! 带圈字符 参考教程: WPS文字中带圈字符使用小妙招 金山文字2005中的带圈字符功能最多可支持制作两个汉字的带圈文字(如首图所示,Word 2003只支持一个汉字),支持两个英文字符,数字最大支持到99.这远远不

图片-安卓 带阴影的折线图控件 如何绘制阴影

问题描述 安卓 带阴影的折线图控件 如何绘制阴影 如图 这种折线下带有阴影的控件,阴影是怎么绘制上去的 解决方案 自问自答............... 我觉得可以先用一个渐变色把背景填充了 然后再画一个不规则的图 里面填充上白色 然后再画其他的线 解决方案二: 使用线性渐变 用Path绘制不过则的图形,然后把线性渐变设置给画笔,这样就实现了上述效果 解决方案三: 你好,你的这个折线demo能给我看看吗? 解决方案四: 你好,你的这个折线demo能给我看看吗? 解决方案五: 好的,我最近整理一下

jsp-SSH项目JSP里面的S标签里的文字输出到页面成斜体是怎么回事?

问题描述 SSH项目JSP里面的S标签里的文字输出到页面成斜体是怎么回事? 用S标签写一个添加页面 文字输出后成斜体,用样式调不过来,这是不是S标签默认的格式呢?怎么才能调过来? 解决方案 http://www.baidu.com/link?url=tk1-UQGQ3qOzuSxWRR8qcg7Q0aGG8ZJxpJOH9b769bfzS1Lvm0BfoPMNs98AsmiY

Div+Js实现的带阴影菜单 微软以前网站曾用过_导航菜单

Div+Js实现的带阴影菜单 微软以前网站曾用过 Jb51.net 网页特效 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]