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

  • Android Asynctask para procesar tramas de video en vivo
  • Detección de objetos Android OpenCV
  • Implementación de diferentes modos PorterDuff en android
  • Android Paper Detection con OpenCV
  • Detección de objetos android opencv
  • Uso de la clase EffectFactory en mapa de bits - Android
  • Encuentra color dominante en un marco de cámara en OpenCV Android
  • Android - Cómo aplicar diffenernt Efectos de imagen en mapa de bits como sepia, blanco y negro, desenfoque, etc
  • Recortar parte particular de la imagen en android
  • Error: No se puede obtener un lockedBuffer, el cliente muy probable intenta bloquear más de buffers maxImages
  • Convertir imagen JPEG / PNG a formato de imagen TIFF en Android OS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.