studio manejo guardar archivos android image-processing bitmap grayscale

manejo - guardar bitmap android



Convierte un mapa de bits a GrayScale en Android (4)

¿No es exactamente eso lo que hace el código al que estás vinculando? 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" usando el filtro para convertirlo en escala de grises. A partir de ese momento, puede usar "bm" como un mapa de bits real en escala de grises y hacer lo que quiera con él.

Tendría que modificar un poco la muestra (está usando tamaños de código duro, puede que quiera clonar el tamaño del mapa de bits original), pero aparte de eso, parece estar tan listo para usar como sea posible. dependiendo de lo que quieras

Soy nuevo en este sitio, y tengo 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 (usando 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 al menos algo que podría convertirse en un mapa de bits más adelante). ¿Debo implementarlo a mano (operaciones de píxel por píxel)?

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

¡Muchas gracias!


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

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


OH, sí, lo hace. Lo estaba usando mal, gracias por señalarlo a mí. (Perdón por la pregunta inútil) Aquí está el código final (basado en gran medida en el que está 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 comentario o comentario al respecto es bienvenido.

Gracias


Si vas a mostrar ese mapa de bits en ImageView . Luego, en lugar de convertir Bitmap a Gray Scale, puede probar el siguiente código:

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

Para referencia