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)?
- Tiempo de procesamiento de OpenCV Mat
- Cómo convertir MatOfPoint a MatOfPoint2f en opencv java api
- Utilizando el array de bytes de la cámara en bruto para la realidad aumentada
- Cuadros de bits en escala de grises en android
- ¿Cómo manejar la limitación de memoria de la GPU para el procesamiento de imágenes de alta resolución en la GPU?
He buscado mucho, y aún no he podido encontrar. ¿Alguien sabe una manera fácil / eficiente de hacerlo?
¡Muchas gracias!
- Reconocimiento de monedas en Android
- Android: Imagen sobre imagen
- Android OpenCV - detectar curvas de Houghlines
- Android: cómo deformar imágenes?
- Animar la imagen de la cara - usando deformación?
- Cambiar el color de un objeto en una aplicación de Android
- Cómo componer (combinar) dos imagen de la foto en android?
- Android: procesamiento de imágenes en tiempo real
¿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
- Cómo crear un formato BKS (BouncyCastle) Java Keystore que contiene una cadena de certificados de cliente
- ¿Cómo cambio el tinte de un ImageButton en el enfoque / presione