2017-12-20 10 views
1

나는 여기에 method.But를 작성하여 흑백 비트 맵에서 현재 비트 맵을 변환하려고하는데 모든 픽셀의 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

가능한 복제 [블랙으로 컬러 이미지를 만드는 방법 and white in Android] (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