java swt canvas_java – 在SWT Canvas上绘制AWT BufferedImage

我正在尝试编写一个SWT组件,它能够获取并绘制java.awt.BufferedImage的实例.我的问题是SWT的Image和AWT的BufferedImage是不兼容的:SWT组件无法绘制java.awt.Image,AWT / Swing组件无法绘制org.eclipse.swt.graphics.Image.

有几种方法试图以其他方式解决这个问题(也可能有一些变化,但基本上有这两种):

他们都有缺点,不符合我的期望:

>将SWT图像转换为BufferedImage的第一种方法是,由于为每个像素创建了一个新的RGB实例,导致大图像的性能较差.

>第二种方法在可用性方面存在一些缺点.请参阅链接文章末尾的“变通办法”.

这导致了我尽力编写一个组件(基于org.eclipse.swt.widgets.Canvas或org.eclipse.swt.widgets.Composite)的结论,该组件允许直接绘制BufferedImage而无需任何转换图片.

我的方法是逐个像素地绘制它.因此,我只需要获取GC的实例,逐行,从左到右遍历源BufferedImage,并使用GC.setForeground(Color color)和GC.drawPoint(int x,int y)绘制相应的Color.

首先,我为每个像素创建了一个新的Color实例,它使用了相当多的内存并增加了额外的延迟,因为新Color获取系统资源并为每个像素创建一个新对象也需要时间.

然后我尝试在绘制图像之前将所有可能的(24位)颜色预加载到数组中.这导致内存使用量激增(> = 600 MB),这在我尝试之前很明显,但我必须验证它.

仅缓存使用的颜色也会导致比需要的内存消耗更多.

我认为必须有一个更低级的方法,不需要那么多的内存,因为SWT能够绘制整个(SWT)图像而不消耗那么多的内存.

我会很感激任何想法或解决方案.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值