62

私はこのサイトを初めて使用し、Android について質問があります。

ビットマップをグレースケールに変換する方法はありますか? グレースケール ビットマップを描画する方法は知っていますが (キャンバス操作を使用: http://www.mail-archive.com/android-developers@googlegroups.com/msg38890.html )、グレー色の実際のビットマップ (または少なくとも後でビットマップに変換できるもの)。手動で実装する必要がありますか (ピクセルごとの操作)?

私はたくさん検索しましたが、まだ見つけることができませんでした。誰でも簡単/効率的な方法を知っていますか?

どうもありがとう!

4

5 に答える 5

162

ああ、そうです。私はそれを間違って使用していました、私にそれを指摘してくれてありがとう。(役に立たない質問で申し訳ありません)これが誰かを助けるかもしれないので(リンクされたものに大きく基づいている)終了コードです:

public Bitmap toGrayscale(Bitmap bmpOriginal)
{        
    int width, height;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();    

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bmpOriginal, 0, 0, paint);
    return bmpGrayscale;
}

それについてのコメントやコメントは大歓迎です。

ありがとう

于 2010-08-02T19:24:05.603 に答える
20

そのビットマップを に表示する場合ImageView。次に、ビットマップをグレースケールに変換する代わりに、以下のコードを試すことができます:

ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);

ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
imageview.setColorFilter(filter);

参考のため

于 2015-04-18T18:04:12.190 に答える
16

あなたがリンクしているコードがまさにそうではありませんか?カラー ビットマップ (「bmp」) を受け取り、複製ビットマップ (「bm」) を作成し、フィルターを使用してカラー ビットマップを「bm」に描画し、グレースケールに変換します。その時点から、「bm」を実際のグレースケール ビットマップとして使用し、それに対してやりたいことを何でも行うことができます。

サンプルを少し調整する必要があります (ハードコードされたサイズを使用しているため、元のビットマップのサイズを複製したい場合があります)。それ以外は、すぐに使用できるようです。 、あなたが望むものに応じて。

于 2010-07-30T19:22:13.450 に答える
14

このアプローチでは、1つの重要な側面を考慮に入れる必要があることを述べておきます。Android上のBitMapはNativeHeapに保存されます。「ビットマップを作成する」だけで、最終的にメモリが詰まり、OutOfMemoryException(OOM)が発生します。

そのため、ビットマップは常にである必要があります.recycled()

于 2011-10-11T13:54:32.957 に答える