【问题标题】:How to prevent Android's drawBitmap from only drawing black images?如何防止Android的drawBitmap只绘制黑色图像?
【发布时间】:2023-03-06 22:21:01
【问题描述】:

根据original question,最终结果是ImageView 中的圆角矩形png,具有自然的阴影。

我有阴影工作,但是当它绘制时,它会使整个图像变黑。

添加阴影时如何防止原始图像(绝对不是黑色)变黑?

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





更新:

我实施了 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);

【问题讨论】:

  • 太棒了!我很高兴所有这些努力都得到了回报。
  • 我要怎么做才能改变阴影的颜色?

标签: android paint blur shadow drawbitmap


【解决方案1】:

我在您的上一个问题中发表了评论,但又来了。

问题可能是您将 32 位图像(原始图像)绘制到 8 位图像(提取的 shadowImage)上。如果是这种情况,请执行类似的操作

Bitmap shadowImage32 = shadowImage.copy(ARGB_8888, true);

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

【讨论】:

    【解决方案2】:

    您必须同时绘制阴影图像和原始图像。阴影图像只包含原始图像的 alpha 值,而不是实际的彩色像素。

    【讨论】:

    • 这不是发生在 c.drawBitmap 行上吗?我以为我正在使用 shadowImage 将 originalBitmap 绘制到画布上。你能用代码澄清一下吗?
    • 不,他不能。他忙着写 1 行答案并破坏 Android,根本没有真正关心开发人员需要什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2018-12-10
    • 2017-08-08
    • 2014-02-28
    • 2016-10-04
    相关资源
    最近更新 更多