アプリ版:「スタンプのみでお礼する」機能のリリースについて

今、java言語で、JPEG形式の画像を白黒の二値画像に変換させるプログラムを考えているのですが、ピクセルの色の取得法がよく分からず、変換できません。
どのようにしたら、白黒の二値画像になるのか、簡単なプログラムを教えてもらえませんか?

A 回答 (3件)

「Java2 グラフィックプログラミング入門」


中山茂
技報堂出版
ISBN4-7655-3320-4

が値段もお手ごろですし、サンプルも多く、比較的よくまとまっていたと思います。これあたりから手をつけてみてはいかかでしょうか?
    • good
    • 0

 今晩は。



 あまり詳しくはないですが、
java.awt.image.SampleModel、
java.awt.image.Raster、
java.awt.image.WritableRaster、
java.awt.image.BufferedImage

等を使うのではないでしょうか。java.awt.image.SampleModel
の解説に、色について少し書いてあります。
    • good
    • 0

要するに、あるイメージを白黒2階調に変換したイメージを作りたい、ということと考えればいいんでしょうか?



方法はいろいろ考えられますが、まぁフィルターを使うのが一番手っ取り早いでしょう。
イメージをBufferedImageとして用意し、ByteLookupTableを作成、それをもとにLookupOpを作ってフィルター処理します。
あらかじめ、0~255の各輝度の階調ごとに変換する値を指定したbyte配列を用意しておきます。これを使って、BufferedImageの輝度をフィルター処理します。

// import java.awt.Image.*;

BufferedImage img1;
BufferedImage img2;
ing w = 500; // イメージのwidth
int h = 300; // イメージのheight

img = Toolkit.getDafaultToolkit.getImage("hoge.jpg");
try {
img1 = new BufferedImage(w,h,BUfferedImage.TYPE_INT_ARGB);
img2 = new BufferedImage(w,h,BUfferedImage.TYPE_INT_RGB);
Graphics2D g = img1.createGraphics();
g.drawImage(img,0,0,this); // とりあえずthisで
g.dispose();
byte[] arr = new byte[256]; // これが変換用のテーブル
for(int i = 0;i < 256;i++)
arr[i] = (byte)(i < 128 ? 0 : 255); // テーブル準備
ByteLookupTable lt = new ByteLookupTable(0,arr);
LookupOp lo = new LookupOp(lt,null);
lo.filter(img1,img2); // フィルター処理
} catch ・・・以下略・・・

例えば、こんな感じで2階調のイメージにフィルター処理されたimg2ができあがります。階調の感じは、byte配列の値をいろいろと調整すればいいでしょう。

BufferedImage,ByteLookupTable,LookupOpについて調べてみるとよいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!