- ベストアンサー
javaのpixelの色の指定に関して
javaの色に関して質問します。 現在PixelGrabberで取得したpixelの中である条件を満たすpixelを指定の色に変換するプログラムを書いているのですが、自分が指定している色と実際に出力される色との違いに悩んでいます。 私が調べた範囲の理解だと pixelはint形式で上の桁から1バイトずつα値(透明度),R,G,Bと表現していると考えています。そこで黒と白を 白=0x00ffffff 黒=0x00000000 と指定しているのですが、真っ黒になってしまいます。指定した色で塗るために知恵を貸してください。お願いします。 ----------------実際のアルゴリズムとデータ---------------- ある閾値よりも濃い色→黒 そうでなければ →白 この値をintの配列にいれ直す 配列からMemoryImageSorceを作る。 bufferedImageに変換して ImageIOのwriteメソッドで書き込む。 ---------------------------結果--------------------------- 添付の画像 グレースケールっぽい画像を二値化
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- tom11
- ベストアンサー率53% (134/251)
追伸です。 int white = 0xFFFFFFFF になり、結果は、-1で言いと思います。 javaでは、C言語のように、unsignedつまり符号なし 表現がないので、0xFFFFFFFFを符号付表現にすると -1になるはずです。 setRGB、getRGBのセットする色の値は int型なので、 int red = 0xFFFF0000 int green =0xFF00FF00 int blue =0xFF0000FF にして、赤なら、redをセットするだけの様です。
お礼
どうもありがとうございます。 つまり補数表現になるということですよね。 書かれた値から考えるに赤緑青全てFFなので白色で 白紙の上に赤を書くということをいいたかったのですね。 ご丁寧にどうもありがとうございます。 pixelgrabberではうまくいきそうにないので、 教えていただいた方法でやってみたいと思います。 どうもありがとうございました。
- tom11
- ベストアンサー率53% (134/251)
こんにちは、 やった手順を書きます。 まず、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メソッドで、 値をセットするだけです。 以上で、二色の画像が出来ました
- hrm_mmm
- ベストアンサー率63% (292/459)
まずは、System.out.print() でも使って、作った配列の中身を表示してみた方がいいんじゃないかな? きっと、全部 0x00000000 なんでしょう。 >ある閾値よりも濃い色→黒 >そうでなければ →白 ここの判定法に問題ありそうです。 元データと、判定部分、配列にデータ格納部分のソースを提示された方が、より解決に近づくでしょう。
お礼
そうです。こんな感じです。 どうやって色を指定したのでしょうか? 是非教えてください。 javaで元の画像の色の白い所の内容を見たら int a(白い所)=-1 これをバイト値でずらした結果 α(α値)=255; r(レッド)=255; g(グリーン)=255; b(ブルー)=255; 0xffffffff=-1; ですので設定してる値はおかしくないと思うのですが、うまくいきません。 配列からbufferedImageにする方法が違うのでしょうか。 よろしければその当たりを教えていただけないでしょうか。