transparente bild in Java SWT

Status
Nicht offen für weitere Antworten.

pipoo

Mitglied
Hallo,

ich habe folgende Probleme in Java SWT:

ich habe ein transparente bild (gif). Ich will dies Bild in einem Canvas hinzugefügt. Das Background von meinem Shell ist identish mit meinem Canvas. Aber der Hintergrund von meinem Canvas ist immer weiss.

Ich hoffe, ihr habt meine Beschreibung bzw. mein Problem verstehen.


Pipoo
 

Anhänge

  • transparent bild.JPG
    transparent bild.JPG
    6,1 KB · Aufrufe: 34
1. Hast du auch verifiziert, dass das gif einen transparenten (nicht weißen) Bereich hat? Nur zur Sicherheit...
2. Wie erzeugst du das Bild?
 
1. Hast du auch verifiziert, dass das gif einen transparenten (nicht weißen) Bereich hat? Nur zur Sicherheit...
2. Wie erzeugst du das Bild?

1. das bild ist ein transparentes Bild.
2. das bild wird ungefähr so erzeugt. Ich hab das code von java2s. und ich nehme mal an, dass ich den rest von jedem gezeichnetem bild mit dem hintergrund von meinem display zeichen sollte.

[HIGHLIGHT="Java"]
public Animations() {
shell.setLayout(new FillLayout());

ImageLoader imageLoader = new ImageLoader();
final ImageData[] imageDatas = imageLoader.load("java2s.gif");

final Image image = new Image(display, imageDatas[0].width, imageDatas[0].height);
final Canvas canvas = new Canvas(shell, SWT.NULL);

canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
e.gc.drawImage(image, 0, 0);
}
});

final GC gc = new GC(image);

final Thread thread = new Thread() {
int frameIndex = 0;
public void run() {
while (!isInterrupted()) {
frameIndex %= imageDatas.length;

final ImageData frameData = imageDatas[frameIndex];
display.asyncExec(new Runnable() {
public void run() {
Image frame =
new Image(display, frameData);
gc.drawImage(frame, frameData.x, frameData.y);
frame.dispose();
canvas.redraw();
}
});

try {
// delay
Thread.sleep(imageDatas[frameIndex].delayTime * 10);
} catch (InterruptedException e) {
return;
}

frameIndex += 1;
}

}
};

shell.addShellListener(new ShellAdapter() {
public void shellClosed(ShellEvent e) {
thread.interrupt();
}
});

shell.setSize(400, 200);
shell.open();

thread.start();

// Set up the event loop.
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
// If no more entries in event queue
display.sleep();
}
}

display.dispose();
}

[/HIGHLIGHT]
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben