Convertir mapa de bits en sepia en android

¿Hay alguna forma de convertir un mapa de bits en sepia? Sé que para convertir a grayScale es establecer la setSaturation en ColorMatrix. Pero ¿qué pasa con Sepia?

Si tiene instancia de imagen, puede utilizar ColorMartix para dibujarla en Sepia. Permítanme describir cómo se puede hacer esto usando Drawable.

public static void setSepiaColorFilter(Drawable drawable) { if (drawable == null) return; final ColorMatrix matrixA = new ColorMatrix(); // making image B&W matrixA.setSaturation(0); final ColorMatrix matrixB = new ColorMatrix(); // applying scales for RGB color values matrixB.setScale(1f, .95f, .82f, 1.0f); matrixA.setConcat(matrixB, matrixA); final ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrixA); drawable.setColorFilter(filter); } 

El proyecto de ejemplo se trasladó de Bitbucket a GitHub . Por favor, consulte la sección de liberación para descargar el binario APK para probar sin compilar.

Introduzca aquí la descripción de la imagen

Sé la respuesta, pero tal vez si algunos tienen otra solución mejor ..

 public Bitmap toSephia(Bitmap bmpOriginal) { int width, height, r,g, b, c, gry; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); int depth = 20; Bitmap bmpSephia = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bmpSephia); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setScale(.3f, .3f, .3f, 1.0f); ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); paint.setColorFilter(f); canvas.drawBitmap(bmpOriginal, 0, 0, paint); for(int x=0; x < width; x++) { for(int y=0; y < height; y++) { c = bmpOriginal.getPixel(x, y); r = Color.red(c); g = Color.green(c); b = Color.blue(c); gry = (r + g + b) / 3; r = g = b = gry; r = r + (depth * 2); g = g + depth; if(r > 255) { r = 255; } if(g > 255) { g = 255; } bmpSephia.setPixel(x, y, Color.rgb(r, g, b)); } } return bmpSephia; } 

He mejorado la respuesta del OP . Esto funciona competitivamente rápido cuando se compara con el método ColorMatrix , pero produce un tono marrón más agradable. (en mi opinión)

 public Bitmap toSepiaNice(Bitmap color) { int red, green, blue, pixel, gry; int height = color.getHeight(); int width = color.getWidth(); int depth = 20; Bitmap sepia = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); int[] pixels = new int[width * height]; color.getPixels(pixels, 0, width, 0, 0, width, height); for (int i = 0; i < pixels.length; i++) { pixel = pixels[i]; red = (pixel >> 16) & 0xFF; green = (pixel >> 8) & 0xFF; blue = pixel & 0xFF; red = green = blue = (red + green + blue) / 3; red += (depth * 2); green += depth; if (red > 255) red = 255; if (green > 255) green = 255; pixels[i] = (0xFF << 24) | (red << 16) | (green << 8) | blue; } sepia.setPixels(pixels, 0, width, 0, 0, width, height); return sepia; } 
  • Insertar contacto (ContactsContract) a través de Intent con imagen (Foto)
  • Correspondencia entre las coordenadas de ImageView y Pixeles de mapa de bits - Android
  • Acceder a imágenes de la aplicación Fotos en mi aplicación Android
  • Video codificar desde la secuencia de imágenes de java android
  • ¿Cómo puedo guardar un mapa de bits con onRetainNonConfigurationInstance () para la orientación de la pantalla?
  • Mostrar imágenesVistas con tema de animación
  • Android hace un video animado de la lista de imágenes
  • Androide galería circular?
  • aplicación es lenta con imágenes en android
  • Cómo obtener un mapa de bits de una imagen sin procesar
  • Galería abierta de Android desde la carpeta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.