Aplicación de una superposición (filtro de imagen) a un mapa de bits

Estoy tratando de capturar una imagen de la intención de la cámara y luego aplicar un filtro de imagen en ella. Para elaborar la imagen sería una imagen capturada por la cámara y el filtro de imagen estaría disponible en los recursos como un archivo png. Puedo superponer el filtro encima de la imagen original. Pero, una vez superpuesta, la imagen original es 'casi' invisible (lo que significa que el filtro está siendo apilado en la imagen original y no simplemente reemplazándolo). Tengo un par de imágenes para ilustrar mi problema. La primera imagen estaba en Photoshop – cuando puse un filtro encima de una imagen, parecía estar bien. La segunda imagen es la producida por el código que se cita a continuación – se puede ver claramente que el efecto de filtro falta. ¿Alguien tiene una idea de por qué algo como esto está ocurriendo. ¿Me falta alguna lógica aquí?

Imagen filtrada - Photoshop

Imagen filtrada - por código

El siguiente es el código que tengo. Te disculpo si encuentras algunas de las mejores prácticas que faltan aquí. Inicialmente estoy tratando de probar el código:

mPictureView = (ImageView) findViewById(R.id.pictureView); filterButton = (Button) findViewById(R.id.filter_button1); // define the threshold fro scaling the image private final double SCALE_THRESHOLD = 6.0; // acquire the bitmap (photo captured) from the Camera Intent - the uri is // passed from a previous activity that accesses the camera and the current // activity is used to display the bitmap Uri imageUri = getIntent().getData(); Bitmap imageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); // set the imageView in the current activity to display the picture retrieved // from the camera mPictureView.setImageBitmap(imageBitmap); // get the dimensions of the original bitmap int photoWidth = imageBitmap.getWidth(); int photoHeight = imageBitmap.getHeight(); filterButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // set the options Options options = new BitmapFactory.Options(); options.inScaled = false; options.inPreferredConfig = Bitmap.Config.ARGB_8888; // get the image (png file) filter from resources using the options Bitmap filter = BitmapFactory.decodeResource(getResources(), R.drawable.colorful_filter,options); // create a scaled copy of the filter Bitmap filtercopy = Bitmap.createScaledBitmap(filter, (int)(photoWidth/SCALE_THRESHOLD,(int)(photoHeight/SCALE_THRESHOLD), true); // recycle the used bitmap filter.recycle(); filter = null; // get a scaled, mutable copy of the orginial image Bitmap imagecopy = Bitmap.createScaledBitmap(imageBitmap,(int)(photoWidth/SCALE_THRESHOLD), (int)(photoHeight/SCALE_THRESHOLD),true); // recycle the used bitmap imageBitmap.recycle(); imageBitmap = null; Paint paint = new Paint(); paint.setAntiAlias(true); //paint.setAlpha(230); - if a discrete value is set, then the image beneath // the filter is visible. But, I don't understand why I need to do this. // Besides, that reduces the efficacy of the filter // create a canvas with the original image as the underlying image Canvas canvas = new Canvas(imagecopy); // now, draw the filter on top of the bitmap canvas.drawBitmap(filtercopy, 0, 0, paint); // recycle the used bitmap filtercopy.recycle(); filtercopy = null; //set the filtered bitmap as the image mPictureView.setImageBitmap(imagecopy); } 

EDIT 1: Pude hacer algunos progresos con la ayuda del artículo que Joru ha proporcionado. El problema parece ser con la mezcla de los 2 mapas de bits. El método drawBitmap sólo dibujaría un mapa de bits sobre el otro en la situación que tengo. La siguiente línea de código realmente intentará mezclar los 2 mapas de bits. También he adjuntado una imagen que representa mi progreso. El mapa de bits subyacente es notablemente más visible ahora:

 paint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY)); 

Tengo que seguir jugando con él durante algún tiempo, antes de lograr la salida deseada. Filtro de color - Revisited

One Solution collect form web for “Aplicación de una superposición (filtro de imagen) a un mapa de bits”

Usted podría intentar algunas cosas:

 Bitmap new = old.copy(Config.ARGB_8888, true); 

Para asegurarse de que el mapa de bits que está abriendo desde MediaStore está en ese formato. Si no es así, es probable que cause su problema.

  • Problema de superposición de texto en ViewFlipper ..
  • ¿Cómo expandir el marcador de superposición en Google Maps?
  • Cómo obtener el largo y lat valor de cuatro esquinas en el mapa en android?
  • No lleve el botón al primer plano al hacer clic
  • ICS teclado de vuelta, los botones de inicio no tomar contacto cuando se abre en la superposición
  • Animación superpuesta a una actividad de la cámara
  • Después de eliminar los eventos de tapa de OverlayItem todavía activan
  • Entender boundCenterBottom ()
  • Uso de ItemizedOverlay y OverlayItem en Android Beta 0.9
  • ¿Hay algún límite para dibujar la ruta usando Geocoder (Android)?
  • ¿Se puede ampliar el tamaño de la superposición con el mapa de google en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.