import java.io.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; public class Test { public static void main (String[] args) { Win win = new Win("Test Window"); } } class Win extends Frame { Toolkit tool; int cl[] = new int [4]; Image l_im, b_im; Win (String name) { // Frameクラスのコンストラクタ(Windowのタイトルを引き渡す) super(name); // イメージの読み込み tool = getToolkit(); l_im = tool.getImage("image.gif"); // l_im = Toolkit.getDefaultToolkit().getImage("image.gif"); でも良い // イメージの読み込み完了を待つ MediaTracker trk = new MediaTracker(this); trk.addImage(l_im, 0); try { trk.waitForID(0); } catch (InterruptedException e) {} // ピクセル情報の取得 get_pixel(50, 70); // Windowの大きさ setSize(180, 400); // Windowの位置(中央) Dimension d = tool.getScreenSize(); // ディスプレイの大きさ setLocation(d.width / 2 - 90, d.height / 2 - 200); // ウィンドウを表示 setVisible(true); // イベントアダプタ addWindowListener(new WinEnd()); } /********/ /* 描画 */ /********/ public void paint (Graphics g) { g.drawImage(l_im, 30, 30, this); Color c = new Color(cl[0], cl[1], cl[2], cl[3]); g.setColor(c); g.fillRect(40, 170, 90, 50); g.drawImage(b_im, 30, 250, this); } /***********************/ /* ピクセル情報の取得 */ /* x,y : 指定位置 */ /***********************/ void get_pixel(int x, int y) { int i1, color, width, height; int pixels[]; // イメージの大きさ width = l_im.getWidth(this); height = l_im.getHeight(this); pixels = new int[width * height]; // PixelGrabberの生成 PixelGrabber pg = new PixelGrabber(l_im, 0, 0, width, height, pixels, 0, width); try { pg.grabPixels(); } catch (InterruptedException e) {} // 指定したピクセルの色を取り出す color = pixels[width * (x - 1) + y]; cl[3] = (color >> 24) & 0xff; // α cl[0] = (color >> 16) & 0xff; // 赤 cl[1] = (color >> 8) & 0xff; // 緑 cl[2] = (color ) & 0xff; // 青 // 指定したピクセルの色を変更して,その色でイメージ全体を描く for (i1 = 0; i1 < width * height; i1++) pixels[i1] = 0x00ff0000 | pixels[i1]; MemoryImageSource mis = new MemoryImageSource(width, height, pixels, 0, width); b_im = tool.createImage(mis); } /************/ /* 終了処理 */ /************/ class WinEnd extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } }