
お世話になります。
カラー画像を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));
}
}
No.1ベストアンサー
- 回答日時:
エラーメッセージの通りだと思いますが・・・。
staticなメソッド"public static void main()"から"createImage()"メソッドを呼ぶ場合には、"createImage()"がstaticで宣言されていないといけませんが、これはjavadocに書いてある通りインスタンス化して使うものです。
以下のようにインスタンスを作成して、インスタンスのメソッドを呼ぶ分には、質問内のエラーは発生しません。
----------------------------------------
JPanel panel = new JPanel();
Image img_gray = panel.createImage(new MemoryImageSource(width,height,rgb_gray,0,width));
----------------------------------------
そもそもJPanelを継承する必要があるのでしょうか?
返事が遅くなってしまい、すみません。
ご回答ありがとうございます。
----------------------------------------
JPanel panel = new JPanel();
Image img_gray = panel.createImage(new MemoryImageSource(width,height,rgb_gray,0,width));
----------------------------------------
提案して下さったように直したところ、無事エラーは消えました。ありがとうございます!
>そもそもJPanelを継承する必要があるのでしょうか?
これについてですが、ネットで調べてみましたが、質問の意味が良く分かりませんでした。すみません。まだJavaについては未熟なもので・・・。
最後に、もう1つ聞いていいでしょうか・・・
変数img_grayを画像ファイル(bitmap等)に変換するにはどのように記述すればいいのでしょうか??これも調べたんですが、うまくいく方法が分かりません。
よろしかったらご回答お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
アルファベットのソート
-
画像の位置指定の数字を変えて...
-
Androidで画面遷移ができません.
-
ある年月の前月(月の開始日)...
-
Javaで常駐するソフトを作って...
-
ファイル名を動的に生成したい
-
「例外 *** は対応する try 文...
-
【JAVAエラー】互換性のない型...
-
IF関数でEmpty値を設定する方法。
-
オブジェクトの中のプロパティ...
-
動的配列が存在(要素が有る)か...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
javaです。 途中まで出来ている...
-
flush()とclose()について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
生年月日と今日の日付から年齢...
-
アプレットの動作テストができない
-
importするには java.io.*; imp...
-
アプレットでスクロールバーを...
-
JPanelについて
-
Java初心者ですが・・・
-
JTableでスクロールバーが表示...
-
main()メソッドが無いコード
-
Javaで常駐するソフトを作って...
-
どうしてもプログラムが動いて...
-
ActionForm form にnullが入っ...
-
JFrame の再表示を禁止したい。
-
Javaアプリケーションのアイコ...
-
javaでスタート画面を作ってい...
-
Java Applet での虫食い算での質問
おすすめ情報