Convertir un mapa de bits en GrayScale en Android

Soy nuevo en este sitio, y vengo con una pregunta sobre Android.

¿Hay alguna manera de convertir un mapa de bits a escala de grises? Sé cómo dibujar un mapa de bits en escala de grises (utilizando las operaciones de lienzo: http://www.mail-archive.com/android-developers@googlegroups.com/msg38890.html ) pero realmente necesito El mapa de bits real en colores grises (o en Menos algo que podría convertirse en un mapa de bits más adelante). ¿Tengo que implementarlo manualmente (operaciones de píxel a píxel)?

He buscado mucho, y aún no he podido encontrar. ¿Alguien sabe una manera fácil / eficiente de hacerlo?

¡Muchas gracias!

4 Solutions collect form web for “Convertir un mapa de bits en GrayScale en Android”

¿No es eso exactamente lo que el código que estás vinculando a hace? Se toma un mapa de bits de color ("bmp"), crea un mapa de bits duplicado ("bm") y luego dibuja el mapa de bits de color en "bm" utilizando el filtro para convertirlo en escala de grises. A partir de ese momento, puede utilizar "bm" como un mapa de bits en escala de grises real y hacer lo que quiera hacer con él.

Usted tendría que ajustar la muestra un poco (es el uso de tamaños codificados en disco duro, es posible que desee sólo clonar el tamaño del mapa de bits original), pero aparte de eso, esto parece estar tan listo para usar como se pone , Dependiendo de lo que quieras.

OH, sí, lo hace. Lo estaba usando mal, gracias por señalarlo a mí. (Lo siento por la pregunta inútil) Aquí está el código de fin (fuertemente basado en el vinculado) ya que puede ayudar a alguien:

public Bitmap toGrayscale(Bitmap bmpOriginal) { int width, height; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, 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(bmpOriginal, 0, 0, paint); return bmpGrayscale; } 

Cualquier observación o comentario al respecto es bienvenido.

Gracias

Me gustaría mencionar que con este enfoque un aspecto importante debe ser tomado en cuenta. BitMap en Android se almacenan en NativeHeap. Con sólo "crear mapas de bits", eventualmente se obstruirá la memoria, obteniendo una OutOfMemoryException (OOM).

Por lo tanto, el mapa de bits siempre debe ser .recycled() .

Si va a mostrar ese mapa de bits en ImageView . Entonces, en lugar de convertir Bitmap a escala de grises, puede probar el siguiente código:

 ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); imageview.setColorFilter(filter); 

Para referencia

  • ¿Cuál es la mejor manera de serializar una imagen (compatible con Swing) de Java a Android?
  • Error al establecer ROI OpenCV Android
  • Uso de OpenCV en Java Camera2 API
  • Cómo obtener el objeto Mat desde el byte en openCV android?
  • Cómo convertir MatOfPoint a MatOfPoint2f en opencv java api
  • Detección de elipse con OpenCV
  • Fuera de memoria con imágenes en Android 5
  • ¿Cuál es la mejor manera de enviar una imagen desde un dispositivo Android a un servidor para su procesamiento y enviar los resultados?
  • No se puede importar javax.imageio.ImageIO en la aplicación de Android
  • Croping la imagen en android usando opencv
  • Animar la imagen de la cara - usando deformación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.