代码之家  ›  专栏  ›  技术社区  ›  coneybeare

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

  •  19
  • coneybeare  · 技术社区  · 15 年前

    根据 original question 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);
    





    我实现了Josh关于复制到正确颜色空间的建议,现在它太好了!对于未来的搜索者, 此代码在图像视图上生成放置阴影

    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

    2 回复  |  直到 8 年前
        1
  •  12
  •   Josh    15 年前

    我在你的最后一个问题上作了评论,但又来了。

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

        2
  •  3
  •   Romain Guy    15 年前

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