Как запретить рисованию AndroidBitmap только для рисования черных изображений?

Согласно первоначальному вопросу , Конечным результатом является прямоугольник с закругленными углами png в ImageView с естественной тенью.

У меня работает тень, но когда она рисует, она делает все изображение целиком черный.

alt text

Как я могу предотвратить исходное изображение (определенно не черное), чтобы быть черным при добавлении тени?

    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);

alt text

19
задан Community 23 May 2017 в 12:13
поделиться

1 ответ

Вы должны нарисовать как теневое изображение, так и исходное изображение. Теневое изображение содержит только альфа-значения исходного изображения, а не фактические цветные пиксели.

3
ответ дан 30 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: