SWT draw2d alpha混合

时间:2011-06-01 09:53:54

标签: java swt alpha blending draw2d

我正在寻找一些在draw2d框架内绘制半透明图形的方法。 目前我正在使用setAlpha()的{​​{1}}。问题是,如果我绘制超过一半的透明图形,它会减慢整个UI的速度。

这是关于它的性能的另一个问题[1]。它针对Linux上的SWT,我的目标是Linux和Windows。 Windows(Win7)系统具有3D功能的图形卡和i7 q720。 Linux机器配备更好,也有3D,所以我认为这不是平台的性能问题。

我的问题是:有没有一种高效的方式在draw2d中实现alpha混合?

我尝试过分别使用OpenGL LWJGL。由于draw2d和OpenGL不能混淆,我必须依赖draw2d,我想我可以这样做:draw2d - > OpenGL - >在Draw2D here其中org.eclipse.draw2d.Graphics是发生OpenGL绘图的Canvas,canvas是我想要获取绘制的OpenGL图片的Canvas。但是我复制OpenGL图形的attempt不起作用,它只能获得底层的Canvas(c1)背景。除此之外,我不确定这是否会改善“性能”......

谢谢,
ATX

2 个答案:

答案 0 :(得分:0)

此问题已知但尚未解决。在draw2d的邮件列表上有一个关于这个问题的帖子:mailing list

TL; DR:由于LWJGL和Eclipse之间的许可证问题,可能的解决方案被删除了。

答案 1 :(得分:0)

确保所有src / dest图像具有相同的深度(例如ARGB) 否则,在复制(src-> dest)

期间会发生昂贵的转换

GC不允许访问其底层缓冲区。 MemoryImageSource可能是一种方法。

您可以使用以下内容获取OpenGL绘图图像:

BufferedImage capture  = new Robot().createScreenCapture(new Rectangle( canvas.getX(), canvas.getY(), canvas.getWidth(), canvas.getHeight() ) );

有点儿,但非常快。

我用它来将我的实时动画帧的jpeg保存到文件夹中。

VirtualDub然后从帧中创建一个电影。必须使用帧速率;)

非常适合制作youtube teasers! You can see one here!