2017-12-20 13 views
1

私は現在のビットマップを以下のメソッドを書くことによって白黒ビットマップに変換しようとしています。しかし、すべてのピクセルのforループのために変換するのに非常に時間がかかります。またはこれを行うための他の方法はありますか?..ヘルプは高く評価されます。ありがとうございます。ビットマップの変更は非常に遅いです...これには他の方法がありますか?

マイコード:

public Bitmap convert(Bitmap src) { 
     final double GS_RED = 0.299; 
     final double GS_GREEN = 0.587; 
     final double GS_BLUE = 0.114; 
     int A, R, G, B; 
     final int width = src.getWidth(); 
     final int height = src.getHeight(); 

     int pixels[] = new int[width * height]; 
     int k = 0; 
     Bitmap bitmap = Bitmap.createBitmap(width, height, src.getConfig()); 
     src.getPixels(pixels, 0, width, 0, 0, width, height); 
     for (int y = 0; y < height; y++) { 
      for (int x = 0; x < width; x++) { 
       int pixel = pixels[x + y * width]; 
       A = Color.alpha(pixel); 
       R = Color.red(pixel); 
       G = Color.green(pixel); 
       B = Color.blue(pixel); 
       R = G = B = (int) (GS_RED * R + GS_GREEN * G + GS_BLUE * B); 
       pixels[x + y * width] = Color.argb(
         A, R, G, B); 
      } 
     } 

     bitmap.setPixels(pixels, 0, width, 0, 0, width, height); 
     return bitmap; 
} 
+0

可能な重複[黒にカラー画像を作成する方法アンドロイドホワイト](https://stackoverflow.com/questions/10185443/how-to-make-the-color-image-to-black-and-white-in-android) – R2R

+0

ColorMatricesを使用します。ピクセル単位で画像をスキャンするのではなく、カラーマップ全体を一度に処理します。そして、多くの異なる効果のために使用することができます。 –

答えて

3

あなたは簡単にすべてのピクセルをループせずにこの方法を使用してグレースケールに、RGB画像に変換することができます

public Bitmap toGrayscale(Bitmap bmp) 
{   
    int originalwidth, originalheight; 
    originalheight = bmp.getHeight(); 
    originalwidth = bmp.getWidth();  

    Bitmap bmpGrayscale = Bitmap.createBitmap(originalwidth, originalheight, 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(bmp, 0, 0, paint); 
    return bmpGrayscale; 
} 
+0

はい。グレースケールのために働いていますが、他のフィルターの場合、どこにR、G、Bの色を付けることができますか?... – Chirag

関連する問題