我正在寻找一些在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
答案 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!