当前位置:编程学习 > C#/ASP.NET >>

GDI+ 绘图速度如何提高

我在做一个与地图有关的东西,中间要绘不同的多个图层,其中光地貌图就是3600*1800的,还有全世界的国界数据,GDI+绘起来很慢,请问各位有什么好方法?
为什么Photoshop那么快呢?
能不能用DirectX或什么的方法呢?
--------------------编程问答-------------------- Yes, ps is powerful. --------------------编程问答-------------------- 3dmax来做嘛 --------------------编程问答-------------------- 这个问题我也很感兴趣,如果有好的东西,传上来看看吧,而且我都不知道应该怎么画 --------------------编程问答-------------------- 一般用D3D吧
或者把整个图片分成小块,然后利用数组贴上去,数组图滚动时比一整张图滚动要少耗内存吧,看C++游戏制作书上是这么说的,不知道对不对! --------------------编程问答-------------------- 图不能有多大就画多大啊!
对于Window程序来说,滚动或翻页或刷新其实都只是一个小的区域,只要在这个小的区域画整个图的相应部分就可以了。而这个区域也可以容易的得到,就是在Paint事件里通过e.ClipRectangle来得到。这个区域相对整个图要小的多了,只在这个区域画效率当然就高了。但注意这个区域因为不是整体,所以要计算出相对整个图来说应该绘制的大小位置才可以在这个区域上画,否则图就乱了。 --------------------编程问答-------------------- 有一个双缓存类可以试一下,我试了试挺好的。下面是从msdn中截取的
为双缓冲提供图形缓冲区。 

命名空间:System.Drawing
程序集:System.Drawing(在 system.drawing.dll 中)

语法
Visual Basic(声明) 
Public NotInheritable Class BufferedGraphics
Implements IDisposable
 
Visual Basic(用法) 
Dim instance As BufferedGraphics 

备注
使用 BufferedGraphics 类,可以实现图形的自定义双缓冲。它提供图形缓冲区的包装,以及可用于写入缓冲区和将其内容呈现到输出设备的方法。

使用双缓冲的图形可以减少或消除重绘显示图面时产生的闪烁。使用双缓冲时,更新的图形首先被绘制到内存的缓冲区中,然后,此缓冲区的内容被迅速写入某些或所有显示的图面中。显示图形的重写相对简短,这通常可以减少或消除有时在更新图形时出现的闪烁。

注意 
使用双缓冲的最简单方法是使用 SetStyle 方法在控件上设置 OptimizedDoubleBuffer 控件样式标志。为某个控件设置了 OptimizedDoubleBuffer 标志以后,便可以通过一个默认的图形缓冲区对该控件的所有绘制进行重定向,而不需要任何附加代码。默认情况下,此标志设置为 true。
 

BufferedGraphics 类没有公共构造函数,且必须由应用程序域的 BufferedGraphicsContext 使用其 Allocate 方法创建。可以从静态 BufferedGraphicsManager.Current 属性检索当前应用程序域的 BufferedGraphicsContext。

可以使用 Graphics 属性绘制到图形缓冲区。此属性提供对 Graphics 对象的访问,该对象将绘制到为此 BufferedGraphics 对象分配的图形缓冲区中。

不带参数的 Render 方法将图形缓冲区的内容绘制到分配缓冲区时指定的图面。通过 Render 方法的其他重载,可以指定指向设备上下文的 Graphics 对象或 IntPtr 对象,图形缓冲区的内容将绘制到该上下文中。

我探索了一下,挺简单的,不了解msdn上有示例,或call我qq:13865792
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,