画像をカラーからグレースケールアルゴリズム、Androidに変換して適用するにはどうすればよいですか?
質問
これらのアルゴリズムの1つを使用して、RGB画像をグレースケールに変換しようとしています:
明度法は、最も目立つ色と最も目立たない色を平均します。 (max(R、G、B)+ min(R、G、B))/ 2。
平均法では、値を単純に平均します:(R + G + B)/ 3。
光度の式は0.21R + 0.71 G + 0.07Bです。
しかし、私は非常に奇妙な結果を得ます!これを達成する方法は他にもあると思いますが、この方法は可能ですか?
コードは次のとおりです: ジェネラコディセタグプレ
解決
特にシフトで符号拡張が行われている場合は、取得するコンポーネントの一部ではないビットを取り除く必要があります。 ジェネラコディセタグプレ
他のヒント
あなたが作ったものは私には大丈夫に見えます。
私はかつてこれをJavaで、ほとんど同じ方法で行いました。 RGBの0〜255色の値の平均を取得して、グレースケールを取得します。これは、あなたの色によく似ています。 ジェネラコディセタグプレ
これをコーディングするために鍬を求めているのではなく、アルゴリズムを求めていると思いますか?
http://www.dfanning.com/ip_tipsによると、「正しい」アルゴリズムはありません。/color2gray.html
彼らは使用します ジェネラコディセタグプレ
Javaで各ピクセルを変更することはできますが、それは非常に非効率的です。オプションがある場合は、ColorMatrix
を使用します。詳細については、Androidのドキュメントを参照してください:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.html
マトリックスの彩度を0に設定して、グレースケールにすることができます。
本当にJavaで実行したい場合は、実行した方法で実行できますが、最初に各要素をマスクする必要があります。つまり、& 0xff
を適用する必要があります。