一次元配列から画像を生成するとき。。。
お世話になります。
カラー画像をjavaプログラムで読み込み、グレースケース化して画像を生成したいのですが、最後の画像生成の部分がうまくいきません。具体的には、
Image img_gray = createImage(new MemoryImageSource(w
idth,height,rgb_gray,0,width));
として、img_grayという画像ファイルに変換しようとしています。しかし、コマンドプロンプトでコンパイルしようとすると、
C:\QR>javac Sample.java
Sample.java:78: static でない メソッド createImage(java.awt.image.ImageProducer)
を static コンテキストから参照することはできません。
Image img_gray = createImage(new MemoryImageSource(width,height,
rgb_gray,0,width));
というエラーが出てしまいます。原因が分かりません。どなたか解決策を教えていただける方おられましたらよろしくお願いします。
以下にソースを貼っておきます。
import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.Color;
import java.awt.color.ColorSpace;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.ImageIO;
import javax.media.*;
import javax.media.control.*;
import javax.media.format.*;
import javax.media.util.*;
import java.awt.image.*;
import java.applet.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.text.*;
public class Sample extends JPanel{
static BufferedImage image;
//static BufferedImage change_image;
public static void main(String[] args) {
//************************************************************************************************
try {
//画像ファイルのデータを読み込む
image = ImageIO.read(new File("C:\\QR\\imagefile\\sa.bmp"));
} catch (Exception e) {
e.printStackTrace();
image = null;
}
// ***********************************************************************************************
//グレースケール
int i,j,r,g,b,d;
Color color;
int width = image.getWidth();
int height = image.getHeight();
int size = width * height;
int[] rgb_src=new int[size];
int[] rgb_gray=new int[size];
PixelGrabber grabber=
new PixelGrabber(image,0,0,width,height,rgb_src,0,width);
try{
grabber.grabPixels(); //画像imageを配列rgb_src[]に読み込む
}catch(InterruptedException e){}
//カラー画像をグレイ化する
for(i=0;i<size;i++){
color=new Color(rgb_src[i]);
r=color.getRed(); //赤の成分を取り出す
g=color.getGreen(); //緑の成分を取り出す
b=color.getBlue(); //青の成分を取り出す
d=(int)(r*0.299+g*0.587+b*0.114); //グレイの成分を作る(NTSC方式準拠)
color=new Color(d,d,d);
rgb_gray[i]=color.getRGB();
}
Image img_gray = createImage(new MemoryImageSource(width,height,rgb_gray,0,width));
}
}
お礼
お返事ありがとうございます。 ご指摘があった 「Image をGraphics2D に変換し」 という部分ですが、 僕の大きな勘違いがあったようです。 g2.drawImage( img, 0, 0, this ); // 裏画面を表画面に複写 という記述の後 グラフイメージ.draw( g2, area, null, null, info ); ↑ org.jfree.chart.plot.XYPlot という感じでグラフを追加していったのですが、"img" と "g2" は独立している と思ってたのですが、そうではないようですね。もうちょっと表示について 勉強する必要があるみたいです。 ありがとうございました。