2012-04-17 14 views
7

私はアンドロイドでユーザーに表示しているときに、カラー画像(ネットからダウンロードしています)を白黒に変換する方法を知りたかったのです。 誰でもあなたのアンドロイドの仕事のいずれかでこの要件を見つけることができます。私にお知らせください。Androidでカラー画像を白黒にする方法

おかげ ラクシュマン

答えて

7

こんにちはあなたは、コントラストを使用して画像の黒n個の白を作ることができます。

public static Bitmap createContrast(Bitmap src, double value) { 
    // image size 
    int width = src.getWidth(); 
    int height = src.getHeight(); 
    // create output bitmap 
    Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig()); 
    // color information 
    int A, R, G, B; 
    int pixel; 
    // get contrast value 
    double contrast = Math.pow((100 + value)/100, 2); 

    // scan through all pixels 
    for(int x = 0; x < width; ++x) { 
     for(int y = 0; y < height; ++y) { 
      // get pixel color 
      pixel = src.getPixel(x, y); 
      A = Color.alpha(pixel); 
      // apply filter contrast for every channel R, G, B 
      R = Color.red(pixel); 
      R = (int)(((((R/255.0) - 0.5) * contrast) + 0.5) * 255.0); 
      if(R < 0) { R = 0; } 
      else if(R > 255) { R = 255; } 

      G = Color.red(pixel); 
      G = (int)(((((G/255.0) - 0.5) * contrast) + 0.5) * 255.0); 
      if(G < 0) { G = 0; } 
      else if(G > 255) { G = 255; } 

      B = Color.red(pixel); 
      B = (int)(((((B/255.0) - 0.5) * contrast) + 0.5) * 255.0); 
      if(B < 0) { B = 0; } 
      else if(B > 255) { B = 255; } 

      // set new pixel color to output bitmap 
      bmOut.setPixel(x, y, Color.argb(A, R, G, B)); 
     } 
    } 

    return bmOut; 
} 

がmathodコールで50にdouble値を設定します。..コードを参照してください。例createContrast(Bitmap src, 50)

+6

素晴らしいことだし、それが完璧に動作しますが、それは遅いですもの。私は通常のアンドロイドデバイスで6個の300px * 300pxの画像を変換しています。これを達成するには6秒かかります!時間を減らすためにできることは何ですか?画像のサイズを小さくすることを意味します。 – Reza

1

ための組み込みメソッドを使用します。

public static Bitmap toGrayscale(Bitmap srcImage) { 

    Bitmap bmpGrayscale = Bitmap.createBitmap(srcImage.getWidth(), srcImage.getHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(bmpGrayscale); 
    Paint paint = new Paint(); 

    ColorMatrix cm = new ColorMatrix(); 
    cm.setSaturation(0); 
    paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
    canvas.drawBitmap(srcImage, 0, 0, paint); 

    return bmpGrayscale; 
} 
関連する問題