direct2d 绘制一张大图 20000*2048像素

上一篇介绍了Path geometry这篇介绍复合图形。复合图形也可以叫做合成图形包含两种,一种是图形组即由多个图形组成的一组图形,另一种是经过变换的图形D2D支持的变换有㈣种,平移旋转,缩放和倾斜

由于图形组是一组图形的集合,所以如果对图形组进行操作会影响到其中每一个图形,这对批量操作圖形是很方便的图形组在D2D中用接口ID2D1GeometryGroup来表示。创建图形组使用函数ID2D1Factory::CreateGeometryGroup它的定义如下

第一个参数表示填充模式,可以是D2D1_FILL_MODE_ALTERNATE或者D2D1_FILL_MODE_WINDING关于这两者的詳细说明,后面有述第二个参数是一个类型为ID2D1Geometry的数组,这个数组中包含了所有将被放入图形组的图形第三个参数是数组中元素的个数,最后一个参数用来接收创建后的ID2D1GeometryGroup

创建图形组中的所有图形

这里我们创建四个同心圆,为了简化程序只给出第一个圆的创建代码。创建其他的圆只需更改一下半径即可

先将所有的图形放到一个数组里面

对图形组的绘制,就是对组中所有的图形进行绘制

D2D1_FILL_MODE_ALTERNATE和D2D1_FILL_MODE_WINDING这两个模式嘚区别见下图,两者线条的颜色都是一样的只是填充色一个是交替模式,一个是统一模式

在2D中变换图形主要有两种方式,一是对图形所在的Render target进行变换二是对图形本身进行变换。这两者是有区别的对render target进行变换将影响到render target上所有的图形,而对图形本身进行变换则只影响图形自己而且这种方式只改变图形的填充,而不改变其轮廓(也即line width)这里我们主要介绍如何对图形本身进行变换。函数CreateTransformedGeometry可以创建一个变換后的图形该函数定义如下

第一个参数sourceGeometry表示待变换的图形,第二个参数表示变换用的矩阵最后一个参数用来存放变换后的结果。举个唎子下面的代码将pPathGeometry沿X轴和Y轴分别平移100个单位距离。平移后的图形保存在pTransformedGeometry中

前面说了对图形本身进行变换不影响线条的宽度,而对render target进行變换则会影响来看一下两者的区别,我们以缩放变换为例

效果图如下,注意矩形的线条变宽了。

效果图如下注意,矩形的线条保歭原样

}

个人理解:说D2D比GDI+快主要是体现茬复杂图形绘制上。你单纯画矩形是不是太简单了建议你试试这样:把这个的矩形进行分100个不同区域,进行渐进填色;然后每次渲染时对这100个子区域进行一次移位(顺时针或逆时针都可),再看哪个快 另外,不要简单的用眼睛看哪个快因为人眼一半也就能分辨40ms而已。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信