2012-04-17 14 views

Respuesta

7

Hola que pueda tomar la imagen en blanco negro n uso de contraste.

ver el código ..

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

Establecer el valor doble de 50 en llamada mathod. Por ejemplo createContrast(Bitmap src, 50)

+6

que es grande y funciona perfectamente pero es lento. Estoy convirtiendo 6 imágenes jpeg 300px * 300px en un dispositivo Android normal y lleva 6 segundos lograrlo. ¿Hay algo que pueda hacer para reducir el tiempo? ¡Quiero decir, además de hacer que mis imágenes sean más pequeñas en dimensiones! – Reza

1

utilizar los métodos incorporados:

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