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

根据原来的问题 ,最终的结果是在一个自然的下拉阴影ImageView的圆angular矩形。

我有这个阴影,但是画的时候,整个图像变成黑色。

替代文字

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

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

更新:

我实施乔希的build议,关于复制到正确的色彩空间,现在它很好! 对于未来的search者, 这段代码在图像视图上产生一个阴影 。 你可以玩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); 

替代文字

Solutions Collecting From Web of "如何防止Android的drawBitmap只绘制黑色图像?"

我在你的最后一个问题上评论过,但这里又是一次。

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

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

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

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