resueltos - ¿Cómo evitar que el drawBitmap de Android solo dibuje imágenes en negro?
herramientas de android studio pdf (2)
Comenté en tu última pregunta, pero aquí está de nuevo.
El problema podría ser que esté dibujando una imagen de 32 bits (la original) en una imagen de 8 bits (la imagen de sombra extraída). Si ese es el caso, haz algo como
Bitmap shadowImage32 = shadowImage.copy(ARGB_8888, true);
después de la llamada a extractAlpha, y dibuja en ese tipo en lugar de la imagen en la sombra de 8 bits.
Según la pregunta original , el resultado final es un png
redondeado en un ImageView
con una sombra de aspecto natural.
Tengo la sombra trabajando, pero cuando dibuja, hace que toda la imagen sea negra.
¿Cómo puedo evitar que la imagen original (definitivamente no negra) sea negra al agregar la sombra?
BlurMaskFilter blurFilter = new BlurMaskFilter(2, BlurMaskFilter.Blur.OUTER);
Paint shadowPaint = new Paint();
shadowPaint.setMaskFilter(blurFilter);
int[] offsetXY = new int[2];
Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pier_t);
Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY);
Canvas c = new Canvas(shadowImage);
c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null);
imageView.setImageBitmap(shadowImage);
ACTUALIZAR:
Implementé la sugerencia de Josh sobre copiar en el espacio de color correcto y ¡ahora funciona muy bien! Para futuros buscadores, este código produce una sombra paralela en una vista de imagen . Puedes jugar con la x y la y con la constante EXTERNA para obtener el efecto deseado.
BlurMaskFilter blurFilter = new BlurMaskFilter(2, BlurMaskFilter.Blur.OUTER);
Paint shadowPaint = new Paint();
shadowPaint.setMaskFilter(blurFilter);
int[] offsetXY = new int[2];
Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pier_t);
Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY);
Bitmap shadowImage32 = shadowImage.copy(Bitmap.Config.ARGB_8888, true);
Canvas c = new Canvas(shadowImage32);
c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null);
imageView.setImageBitmap(shadowImage32);
Tienes que dibujar tanto la imagen de la sombra como la imagen original. La imagen de la sombra solo contiene los valores alfa de la imagen original, no los píxeles de colores reales.