当前位置:C++技术网 > 资讯 > 纹理画刷的使用及作用

纹理画刷的使用及作用

更新时间:2015-10-09 21:43:01浏览次数:1+次

纹理画刷的使用
纹理画刷的作用实际上就是将图片在目标区域中进行平铺。
要创建一个纹理画刷,需要做的工作应该分为以下几步:
1,定制纹理画刷使用的基本图形
2,设定画刷图片的大小
3,确定基本图案的排列方式

GDI+使用了TextureBrush类来构造纹理画刷。TextureBrush类也同时要求将以上3个步骤在依次在类构造函数中完成。TextureBrush类的构造函数中完成。TextureBrush类的构造函数有以下其中,分别使用不同的参数来构造不同属性的文理画刷:

其中各参数的具体含义为:
image:纹理画刷使用的基本图案。
dstRect:用于指定图案中用于画刷中的矩形区域。它的大小不能超过基本图案的范围,否则,画刷不能完成正常的填充效果
wrapmode:指定在画刷中如何排列基本图案
imagearributes:用于指定基本图案的附加特征参数
在TextureBrush类的7个构造函数中,数据类型为Image或Imageattributes的参数指明了威力画刷使用的基本图案及相关特征信息


void CTextureDlg::OnTexturePhoto() 
{
	// TODO: Add your control notification handler code here
	CDC* pDC = GetDC();
	Graphics graphics(pDC->m_hDC);
	this->RedrawWindow();
	Pen pen(Color(255,0,0,255),2);
	SolidBrush brush(Color(255,0,0));
	Font myfont(L"宋体",20);
	//////设置纹理画刷的不同填充区域////////////
	RectF rect1(10,10,200,200);
	RectF rect2(20,10,200,200);
	RectF rect3(40,10,200,200);

	/////////装入纹理图片////////////
	Image image(L"Text.bmp");//////       110*70
	///////构造纹理画刷1:使用默认方式
	TextureBrush tBrush(&image);
	///////使用纹理画刷填充圆形区域
	graphics.FillEllipse(&tBrush,rect1);
	graphics.DrawEllipse(&pen,rect1);
	///////绘制圆周
	graphics.DrawString(L"原始图片大小",6,&myfont,PointF(40,220),NULL,&brush);
	///////构造纹理画刷2:只使用给定图片的区域
	TextureBrush tBrush2(&image,Rect(0,0,35,72));
	graphics.FillEllipse(&tBrush2,rect2);
	graphics.DrawEllipse(&pen,rect2);
	graphics.DrawString(L"使用部分截图",6,&myfont,PointF(240,220),NULL,&brush);
	///////构造纹理画刷3:将使用图片的画刷进行缩放
	TextureBrush tBrush3(&image);
	///////对画刷进行50%的缩放
	tBrush3.SetTransform(&Matrix(0.5f,0.0f,0.0f,0.5f,0.0f,0.0f));
	graphics.FillEllipse(&tBrush3,rect3);
	graphics.DrawEllipse(&pen,rect3);
	graphics.DrawString(L"比例缩小图片",6,&myfont,PointF(440,220),NULL,&brush);
}

效果图:

我们看下SetTransfrom函数:



Status SetTransform(
  [in]  const Matrix *matrix
);
我们看看例子:



VOID Example_SetTransform(HDC hdc)
{
   Graphics graphics(hdc);

   Matrix matrix(2, 0, 0, 1, 0, 0);  // Horizontal stretch

   Image image(L"HouseAndTree.gif");
   TextureBrush textureBrush(&image);
   textureBrush.SetTransform(&matrix);
   graphics.FillEllipse(&textureBrush, 0, 0, 400, 200); 
}


我们改下matrix参数:


tBrush3.SetTransform(&Matrix(1.5f,0.0f,0.0f,1.5f,0.0f,0.0f);
效果图:



没错,就是放大了1.5倍。