Imageクラスのコンストラクタには、ImageDataオブジェクトを指定してImageオブジェクトを作成することができます。 ImageDataクラスは、デバイス非依存に画像をデータとして表現する クラスで、システムリソースは消費しません。 ImageDataオブジェクトからImageオブジェクトが作成されてはじめてシステムリソースは消費されます。
すでに存在する画像ファイルから画像を表示する方法を解説します。 画像の表示には、Imageクラスの使用が必要です。 Eclipse APIが現在サポートするフォーマット形式は、BMP、ICO、JPEG、GIF、PNG、TIFFのみ です。 その他のフォーマットはサポートされていません。
画像を描画するためには、画像ファイルをImageDataオブジェクトに変換し、 ImageDataオブジェクトからImageオブジェクトを作成し、 GCオブジェクトのdrawImage(Image)メソッドにより画像を描画します。 サンプルとして用意したImageCanvasクラスでは、imageInput引数で取得したストリームから ImageDataオブジェクトを作成しています。
import java.io.InputStream;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
public class ImageCanvas extends Canvas {
ImageData imageData;
public ImageCanvas(Composite parent, InputStream imageInput) {
super(parent, SWT.NONE);
final byte width = 100;
final byte height = 100;
imageData = new ImageData(imageInput).scaledTo(width, height);
addPaintListener(paintListener);
setSize(width, height);
}
private PaintListener paintListener = new PaintListener() {
public void paintControl(PaintEvent e) {
GC gc = e.gc;
Image image = new Image(Display.getCurrent(), imageData);
gc.drawImage(image, 0, 0);
image.dispose();
}
};
}
ImageDemonstrateクラスは、ImageCanvasクラスを使用するためのエントリポイント(main)クラスです。
ImageDemonstrateクラスのあるフォルダと同じ位置にある
[
myImage.jpg
(
zip
)
]
というファイルを指定して、
InputStreamオブジェクトを作成しています。
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class ImageDemonstrate {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
ImageCanvas imageCanvas =
new ImageCanvas(shell,
ImageDemonstrate.class.
getResourceAsStream("./myImage.jpg"));
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}

画像の作成は、ImageDataオブジェクト上に作成することができます。 それの表示は、GC#drawImageで作成したImageDataオブジェクトを表示するだけです。