我对Java和SWT很陌生,希望将一个图像溶解到下一个图像中。我现在在Label(相关代码)中有一个图像:
Device dev = shell.getDisplay();
try {
Image photo = new Image(dev, "photo.jpg");
} catch(Exception e) { }
Label label = new Label(shell, SWT.IMAGE_JPEG);
label.setImage(photo);
现在我希望photo
以我指定的速度淡入不同的图像。这可能是在这里设置的,还是我需要深入研究org.eclipse.swt.graphics
api?
此外,这将是一个幻灯片放映,可能包含数百张照片,只有前进(永远不会回到上一张图片) - 考虑到这一点,是否有一些我明确需要做的事情,以便删除旧的记忆中的图像?
谢谢!
答案 0 :(得分:4)
我不知道任何直接支持此类功能的swt小部件,最好的办法是扩展org.eclipse.swt.widgets.Canvas
并添加一个org.eclipse.swt.events.PaintListener
,可以使用不同的alpha处理绘制2个重叠的图像。所以像这样:
addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
e.gc.setAlpha(50);
e.gc.drawImage(image1, 0, 0);
e.gc.setAlpha(100);
e.gc.drawImage(image2, 0, 0);
}
});
之后你只需创建一个线程更改重绘Canvas并以某个间隔更改图像/ alpha值。
至于关于通过调用Image
对象上的dispose()
从内存中删除Image
的问题,使用swt时,让它收集垃圾是不够的。