Java SWT - 从一个图像到下一个图像的溶解(淡入淡出)

时间:2010-04-24 21:52:13

标签: java image graphics swt

我对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?

此外,这将是一个幻灯片放映,可能包含数百张照片,只有前进(永远不会回到上一张图片) - 考虑到这一点,是否有一些我明确需要做的事情,以便删除旧的记忆中的图像?

谢谢!

1 个答案:

答案 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时,让它收集垃圾是不够的。