SWT绘图需要注意的一个问题

本文讨论了SWT的drawImage方法在处理大型图片时存在的性能问题,并提出了一种通过切割图片并单独处理小图片块以提高绘制速度的方法。此外还探讨了SWT在不同硬件条件下的表现及进一步优化的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SWT的drawImage比较慢,如果你有一些特殊的需要,比如从一张很大的图片中切出一块来,并进行翻转,而后画出,那么就会非常之慢。这种做法在游戏开发中非常常见。我也是在开发游戏地图编辑工具时发现这个问题的。猜想可能最底层的实现上先将整张大图就行了翻转,而后切出部分绘制,所以非常慢。我试着将大图切成小图,对小图进行翻转绘制,结果快了5倍!对于这个问题,我的同事在一个国外论坛上发现一个有趣的帖子,楼主在C#中遇到了和我同样的问题,也用同样的方法解决了。究其原因是C#和SWT Win32版都使用了GDI+的API。我猜想GDI+也许没有考虑到这件事吧。

说到切图,我本来是建立一个空白的图片,然后得到他的GC并将大图上相应部分绘制上去。但SWT的空白图片是不透明的,也就是说所有像素的alpha都不是0. 而若将这个图片的alpha data都设成0,图片又无法绘制上去了。所以此路不通。于是我采用了直接得到大图ImageData中数据的方法。新建一个小图尺寸的ImageData,采用大图的色深度和调试版(直接得到就可以)。然后从大图上读取相应位置的像素和alpha值写入小图的相应位置即可。

虽然这种方法比直接从大图中clip绘制快了很多,但总体上SWT的drawImage还是比较慢的,特别是在比较差的机器上更明显了。所以还需要从其他方面提速,比如AWT-SWT结合,使用OpenGL绑定,甚至通过JNI调用DirectX等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值