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/[email protected]/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!

¿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: creación de un mapa de bits con contenido de SurfaceView
  • Biblioteca de procesamiento de imágenes para Android?
  • Error: No se puede obtener un lockedBuffer, el cliente muy probable intenta bloquear más de buffers maxImages
  • Uso de OpenCV en Java Camera2 API
  • Error al establecer ROI OpenCV Android
  • Android - openCV, obtener parte de la imagen - comportamiento extraño
  • Incluir OpenCV en el paquete de aplicaciones de Android
  • Dilatación y erosión en Android
  • Procesamiento de imágenes en Android
  • Procesamiento de datos de la vista previa de la cámara con Android L y Camera2 API
  • OpenCV FeatureDetector
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.