<更新記録>
2007年 12月 19日
執筆

姉妹サイト検索 Web検索


ImageData

ImageData

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()メソッドが定義されています。


Powered by VeryEasyCMS