Java SWT - растворить (исчезнуть) от одного изображения к другому - PullRequest
1 голос
/ 25 апреля 2010

Я довольно новичок в 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?

Кроме того, это будет слайд-шоу, которое может содержать сотни фотографий, только когда-либо двигаясь вперед (никогда не возвращаясь к предыдущему изображению) - учитывая это, есть ли что-то, что мне явно нужно сделать, чтобы удалить старую образы из памяти?

Спасибо !!

1 Ответ

4 голосов
/ 27 апреля 2010

Мне не известны какие-либо виджеты SWT, которые непосредственно поддерживают этот тип функциональности, лучше всего было бы расширить org.eclipse.swt.widgets.Canvas и добавить org.eclipse.swt.events.PaintListener, который может обрабатывать рисование 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);
    }
});

После этого вам просто нужно создать поток, изменить перерисовку вашего холста и изменить значения изображения / альфа через некоторый интервал.


Что касается вашего вопроса об удалении Image из памяти, который выполняется путем вызова dispose() объекта Image, то при использовании swt недостаточно будет собрать мусор.

...