Как сделать так, чтобы Android drawBitmap не рисовал только черные изображения?
Согласно первоначальному вопросу, конечный результат - прямоугольник с закругленными углами png
в ImageView
с естественной тенью
У меня работает тень, но когда она рисует, все изображение становится черным.
Как я могу предотвратить появление черного изображения на исходном изображении (определенно не черном) при добавлении тени?
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);
ОБНОВИТЬ:
Я реализовал предложение Джоша о копировании в правильное цветовое пространство, и теперь оно отлично работает! Для будущих пользователей этот код создает тень на изображении. Вы можете поиграть с x и y, а также с константой OUTER, чтобы получить желаемый эффект.
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);
2 ответа
Я прокомментировал ваш последний вопрос, но здесь он снова.
Проблема может заключаться в том, что вы рисуете 32-битное изображение (оригинал) на 8-битном изображении (извлеченное shadowImage). Если это так, сделайте что-то вроде
Bitmap shadowImage32 = shadowImage.copy(ARGB_8888, true);
после вызова extractAlpha и нарисуйте этого парня вместо 8-битного shadowImage.
Вы должны нарисовать как теневое изображение, так и исходное изображение. Теневое изображение содержит только альфа-значения исходного изображения, а не фактические цветные пиксели.