当前位置:C++技术网 > 资讯 > 纹理画刷的深入讲解

纹理画刷的深入讲解

更新时间:2015-10-15 15:53:21浏览次数:1+次

纹理画刷的使用及作用》一文中,我们详细解析了纹理画刷的几种应用实例,也就是缩放。现在我们详细聊聊纹理画刷实现缩放的原理。我们就单从一个小程序说。
我们将给全代码,不像其他网站那样断章取义,因此我们的网站的文章你可不能错过哦!

首先我们创建基于对话框的工程,添加按钮控件,更名为“纹理图片”修改ID。然后我们在stdafx.h头文件中添加如下代码:


#include "Gdiplus//BaseTsd.h"
#include "Gdiplus//Gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib,"Gdiplus//gdiplus.lib");
这代码的作用我就不详述了,在《利用GDI+实现水印(1)》一文中,我已详细解释了。
接着我们定义两个全局变量,在APP类InitInstance函数的上面,添加两句代码,声明变量就行:
GdiplusStartupInput m_pGdiplus;
ULONG_PTR m_pGdiToken;
最后就是在InitInstance函数中,添加最重要的代码:
GdiplusStartup(&m_pGdiToken,&m_pGdiplus,NULL);
不过你得把它放在dlg创建之前哦!代码的顺序很重要!
准备工作做完了,下面利用类向导创建消息消息响应函数。看代码:
void CTextureDlg::OnTexturePhoto() 
{
 // TODO: Add your control notification handler code here
 //CDC* pDC = GetDC();
 Graphics graphics(m_hWnd);
 this->RedrawWindow();
 Pen pen(Color(255,0,0,255),2);
 SolidBrush brush(Color(255,0,0));
 Font myfont(L"宋体",20);
 //////设置纹理画刷的不同填充区域////////////
 RectF rect1(80,80,200,200);

 /////////装入纹理图片////////////
 Image *image=Image::FromFile(L"Text.bmp");//////       
 ///////构造纹理画刷1:使用默认方式
 TextureBrush tBrush(image);
 ///////使用纹理画刷填充圆形区域
 graphics.FillEllipse(&tBrush,rect1);
 graphics.DrawEllipse(&pen,rect1);
 ///////绘制圆周
 graphics.DrawString(L"原始图片大小",6,&myfont,PointF(1,50),NULL,&brush);
}
我们从装入图片代码开始说,根据路径创建图像,然后我们创建纹理画刷,那么所谓的使用默认方式-那就是说我们创建的纹理画刷的大小就是我们引入的图像的大小,下面我们接着看FillEllipse函数,我们将之前设定好的矩形块的大小适应为现在的圆形,也就是说在一个一定大小矩形块里画圆,接着就是将我们的纹理画刷填充圆形区域,直到填满。那么《纹理画刷的使用及作用》里的部分剪切图形的来由,我想你也应该明白了吧。就是修改纹理画刷函数里第二个参数表示的矩形块的大小。就能出来剪切图片,具体代码请看《纹理画刷的使用及作用
效果图:


你得注意哦!如果你直接那我的代码来写程序,可能有问题,那是因为,图片的大小不同,你就得改rect的大小,适应图片的大小。