2010-04-24 19 views
1

我对Java和SWT非常新颖,希望能够让一个图像融入下一个。我现在已经在Label(相关代码)一个形象:Java SWT - 从一个图像溶解(淡入淡出)到下一个

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

我从来没有与SWT合作过,但在AWT/Swing中,您可以使用http://java.sun.com/j2se/1.5.0/docs/api/java/awt/AlphaComposite.html来实现此目的。 – Searles 2010-04-24 22:22:44

回答

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由该Image对象调用dispose(),让它得到收集使用SWT时将没有足够的垃圾做的问题。