私が持っているビットマップイメージでノイズ除去アルゴリズムを実行しようとしています - 関数が私に短い[]を返すので、ビットマップを生成するためint []にキャストしようとしましたが、これを取得します:short []をint []に変換してグレースケールビットマップを作成するにはどうすればよいですか?
グレースケールであることが望ましくありません。何か案は?
私が持っているビットマップイメージでノイズ除去アルゴリズムを実行しようとしています - 関数が私に短い[]を返すので、ビットマップを生成するためint []にキャストしようとしましたが、これを取得します:short []をint []に変換してグレースケールビットマップを作成するにはどうすればよいですか?
グレースケールであることが望ましくありません。何か案は?
ビットマップのピクセルは、ARGB_8888、RGB_565、ARGB_4444、またはALPHA_8のいずれかを使用してエンコードされます。したがって、戻ってくる短い値は、それらの形式の1つでは、ややピンクのように見える値に対応する必要があります。
グレースケールビットマップが必要な場合は、0〜256の範囲の値しか指定できません(ARGB_8888を使用している場合は、最大8ビットの貴重なカラーコンポーネントです)。したがって、その範囲をその範囲内の値にマップし、RGBコンポーネントごとにその値を複製する必要があります。
RGBチャネルのそれぞれで8ビットの強度を複製する代わりに、強度をアルファチャネルとして使用できます。このスキームでは、0は透明(背景色)に対応し、255は完全に不透明(黒色、または任意の色、さらにはピンク色)に対応します。アイデアは、Jason LeBrunの提案と似ています。各値の上位8ビットを取り、24ビット左にシフトしてから、フル強度に使用したい色とビット単位ORします(黒を表現する場合は何も表示しません)完全な強度)。
ではなく、 '|'を使用してください。これはビットマップのメモリ要件を減らすALPHA_8 BitmapConfigを使うことができるという利点があります。 –
私はこれを試してみるつもりですが、他のバグについてはまだ解明されていません。浮動小数点から短く、後ろにコードの型変換の問題があったと思います。見る。ありがとう。 –
私は値が12ビットの範囲内にあると信じていますが、いいグレースケールを取得する方法がわかりません - 0xfffで正規化してからint * 256にキャストしようとしましたがこれですべてが黄色になります。私はまた、このビットマップがARGBだと確信していますが、それ以上のことは分かりません。 –
OK、上位8ビットを取ることによって12ビット値を8ビット値に正規化する: 'val = 0xFF&(val >> 4)'次に、各RGB位置にその8ビット値を複製し、 '0xFF000000 +(val << 16)+(val << 8)+ val' –
' + 'の代わりにビット単位の' or'演算子( '|')を使います。 '0XFF000000'は負の数です。これはRGBコンポーネントを正しく追加しません。 –