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

javaの色に関して質問します。

現在PixelGrabberで取得したpixelの中である条件を満たすpixelを指定の色に変換するプログラムを書いているのですが、自分が指定している色と実際に出力される色との違いに悩んでいます。

私が調べた範囲の理解だと
pixelはint形式で上の桁から1バイトずつα値(透明度),R,G,Bと表現していると考えています。そこで黒と白を

白=0x00ffffff
黒=0x00000000

と指定しているのですが、真っ黒になってしまいます。指定した色で塗るために知恵を貸してください。お願いします。

----------------実際のアルゴリズムとデータ----------------
ある閾値よりも濃い色→黒
そうでなければ   →白
この値をintの配列にいれ直す
配列からMemoryImageSorceを作る。
bufferedImageに変換して
ImageIOのwriteメソッドで書き込む。
---------------------------結果---------------------------
添付の画像

グレースケールっぽい画像を二値化

「javaのpixelの色の指定に関して」の質問画像

A 回答 (4件)

変換結果が、こんな感じで、良いのかな??


青一色にしてみました。
「javaのpixelの色の指定に関して」の回答画像2
    • good
    • 0
この回答へのお礼

そうです。こんな感じです。
どうやって色を指定したのでしょうか?
是非教えてください。

javaで元の画像の色の白い所の内容を見たら
int a(白い所)=-1
これをバイト値でずらした結果
α(α値)=255;
r(レッド)=255;
g(グリーン)=255;
b(ブルー)=255;

0xffffffff=-1;
ですので設定してる値はおかしくないと思うのですが、うまくいきません。

配列からbufferedImageにする方法が違うのでしょうか。
よろしければその当たりを教えていただけないでしょうか。

お礼日時:2009/12/02 18:20

追伸です。



int white = 0xFFFFFFFF

になり、結果は、-1で言いと思います。
javaでは、C言語のように、unsignedつまり符号なし
表現がないので、0xFFFFFFFFを符号付表現にすると
-1になるはずです。


setRGB、getRGBのセットする色の値は
int型なので、

int red = 0xFFFF0000
int green =0xFF00FF00
int blue =0xFF0000FF

にして、赤なら、redをセットするだけの様です。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
つまり補数表現になるということですよね。

書かれた値から考えるに赤緑青全てFFなので白色で
白紙の上に赤を書くということをいいたかったのですね。

ご丁寧にどうもありがとうございます。
pixelgrabberではうまくいきそうにないので、
教えていただいた方法でやってみたいと思います。
どうもありがとうございました。

お礼日時:2009/12/09 08:20

こんにちは、



やった手順を書きます。

まず、Dukeさんの、アップした画像を、キャプチャーして
jpegの画像に変換しました。
gifでも良いのですが。gifだと白黒256段色調に
なるみたいです。
白黒の画は、jpegしても、大体256段色調で、
RとGとBの値が、全部同じ表現になるようです。
例えば 0xFF464646とか、0xFFefefefとか、
0xFFの部分は、不透明を意味しているようです。
また、efより、46の方が、黒っぽくなります。

そこで、jepgの画像を、imageio.readで、
bufferedimageに代入します。
後は、簡単です。
イメージの一点一点をbufferedimageのgetRGBメソッドで
読み込みます。

今回の、境界は、
0xFFFaFaFaにしました。
これ以下の、値は、0xFF0000FFつまり青に変換して、
これ以上の値は、0xFFFFFFFFつまり白に変換しました。
変換方法は、単に、buffereimageのsetRGBメソッドで、
値をセットするだけです。

以上で、二色の画像が出来ました
    • good
    • 0

まずは、System.out.print() でも使って、作った配列の中身を表示してみた方がいいんじゃないかな?


きっと、全部 0x00000000 なんでしょう。
>ある閾値よりも濃い色→黒
>そうでなければ   →白
ここの判定法に問題ありそうです。
元データと、判定部分、配列にデータ格納部分のソースを提示された方が、より解決に近づくでしょう。
    • good
    • 0

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