ImageDataクラスは、デバイス非依存に画像の情報を表現します。 ImageDataを画像として表示するには、Imageクラスを使ってImageオブジェクトを作成してから行う必要があります。
ImageDataクラスのコンストラクタには、以下のものがあります。
ImageData(InputStream stream) ImageData(String filename) ImageData(int width, int height, int depth, PaletteData palette) ImageData(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data)streamを引数にとるものとfilenameを引数にとるコンストラクタは、外部にすでに用意されている画像からImageDataオブジェクトを作成します。 width、height、depth、paletteを引数にとるコンストラクタは、プログラム側が一からイメージを作成するときに使用します。
画像を一から作成する方法について解説します。
まずコンストラクタを呼び出してImageDataオブジェクトを作成します。 width引数とheight引数には画像の幅と高さを指定します。 depthには色情報が使用するビット数を指定します(2を指定したら2の2乗の4色が表現できます)。 この値は、2の累乗の値でなければなりません(1,2,4,8,16,32)。 paletteにはPaletteDataオブジェクトの色情報を指定します。
ImageDataオブジェクトを作成したら、setPixel(int x, int y, int pixelValue)メソッドで色情報をピクセルごとに書き込んでいきます。 xとy引数は座標を、pixelValueはImageDataオブジェクトを作成するときに指定したPaletteDataから色を取得する値を指定します。

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class CreateImageDdata {
private static final short IMAGEWIDTH = 100;
private static final short IMAGEHEIGHT = 100;
public static ImageData createImageData() {
// 色情報の作成
PaletteData palette = new PaletteData(new RGB[] {
new RGB(0xFF, 0x00, 0x00),
new RGB(0x00, 0xFF, 0x00),
new RGB(0x00, 0x00, 0xFF)
});
// ImageDataオブジェクトの作成
ImageData imageData = new ImageData(IMAGEWIDTH, IMAGEHEIGHT, 2, palette);
// ImageDataオブジェクトにピクセルを書き込んでいく
for (short h=0 ; h < IMAGEHEIGHT ; h++) {
for (short w=0 ; w < IMAGEWIDTH ; w++) {
int pixelValue = (h/20 + w/20) % 3;
imageData.setPixel(h, w, pixelValue);
}
}
return imageData;
}
public static void main(String[] args) {
final Display display = new Display();
Shell shell = new Shell(display);
Canvas canvas = new Canvas(shell, SWT.NONE);
canvas.setSize(IMAGEWIDTH, IMAGEHEIGHT);
// ImageDataオブジェクト作成
final ImageData imageData = createImageData();
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
// 描画
Image image = new Image(null, imageData);
e.gc.drawImage(image, 0, 0);
image.dispose();
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
画像のある色を透過色に指定することができます。
ImageData#transparentPixelを設定することで、透過色がどれになるかを指定することができます。
imageData.transparentPixel = 0;先ほどのプログラムに、この命令を加えると、実行結果では、0番目のインデックスの赤色が透過色に設定されます。
透過色について、ImageDataクラスではgetTransparencyMask()メソッドやgetTransparencyType()メソッドが定義されています。