如何防止Android的drawBitmap只绘制黑色图像?

con*_*are 19 android paint blur shadow 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);
Run Code Online (Sandbox Code Playgroud)





更新:

我实现了Josh关于复制到正确色彩空间的建议,现在它的效果非常好!对于未来的搜索者,此代码会在图像视图上生成阴影.您可以使用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);
Run Code Online (Sandbox Code Playgroud)

替代文字

Jos*_*osh 12

我在你的上一个问题中发表了评论,但在这里又是一次.

问题可能在于您将32位图像(原始图像)绘制到8位图像(提取的shadowImage)上.如果是这样的话,做一些类似的事情

Bitmap shadowImage32 = shadowImage.copy(ARGB_8888, true);
Run Code Online (Sandbox Code Playgroud)

在extractAlpha调用之后,绘制到那个人而不是8位shadowImage.