2012-04-17 56 views

Trả lời

7

Hi bạn có thể làm cho màu trắng hình ảnh màu đen n sử dụng độ tương phản.

Xem mã ..

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; 
} 

Thiết lập giá trị gấp đôi lên 50 theo yêu cầu mathod. Ví dụ createContrast(Bitmap src, 50)

+6

đó là tuyệt vời và nó hoạt động hoàn hảo nhưng nó chậm. Tôi đang chuyển đổi 6 hình ảnh jpeg 300px * 300px trên thiết bị Android thông thường và mất 6 giây để hoàn thành điều đó! có điều gì tôi có thể làm để giảm thời gian không? Tôi có nghĩa là bên cạnh làm cho hình ảnh của tôi nhỏ hơn về kích thước! – Reza

1

Sử dụng các phương pháp built-in:

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; 
} 
Các vấn đề liên quan