首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何避免安卓drawBitmap只画黑图?

如何避免安卓drawBitmap只画黑图?
EN

Stack Overflow用户
提问于 2010-08-27 06:26:32
回答 2查看 12.5K关注 0票数 19

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

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

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

代码语言:javascript
复制
    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以及外部常量来获得所需的效果。

代码语言:javascript
复制
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);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-27 22:20:27

我在您的上一个问题中进行了评论,但这里又出现了。

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

代码语言:javascript
复制
Bitmap shadowImage32 = shadowImage.copy(ARGB_8888, true);

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

票数 12
EN

Stack Overflow用户

发布于 2010-08-27 06:53:58

你必须同时绘制阴影图像和原始图像。阴影图像仅包含原始图像的Alpha值,而不包含实际的彩色像素。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3580051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档