【问题标题】:android semitransparent bitmap background is blackandroid半透明位图背景为黑色
【发布时间】:2011-11-15 13:32:04
【问题描述】:

我正在尝试创建半透明位图,我使用了以下代码:

private Bitmap SemiTransparent(Bitmap bitmap, int opacity) {


    // Create an array to hold the data of bitmap for which semi transparent bitmap is to be obtained
    int[] data = new int[(int)(bitmap.getWidth()) + 1];

    for (int y = 0; y < bitmap.getHeight(); ++y)
    {
           // Get a single line of data
          bitmap.getPixels(data, 0, bitmap.getWidth(), 0, y,bitmap.getWidth(), 1);     

     // Reset the alpha values 
           for (int x = bitmap.getWidth(); x>0; --x) 
           {

                data[x] = (data[x] & 0x00ffffff) | (opacity << 24);
           }     
          //fill alphaBitmap data
           bitmap.setPixels(data, 0, bitmap.getWidth(), 0, y, bitmap.getWidth(), 1);

    }


         return bitmap;
}

唯一的问题是背景(透明)颜色始终为黑色 - 我如何修改它以使背景颜色完全透明而其余部分仍然半透明?

【问题讨论】:

    标签: android bitmap transparent


    【解决方案1】:

    使用此方法使位图透明:

    /**
     * @param bitmap The source bitmap.
     * @param opacity a value between 0 (completely transparent) and 255 (completely
     * opaque).
     * @return The opacity-adjusted bitmap.  If the source bitmap is mutable it will be
     * adjusted and returned, otherwise a new bitmap is created.
     */
    private Bitmap adjustOpacity(Bitmap bitmap, int opacity)
    {
        Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
        Canvas canvas = new Canvas(mutableBitmap);
        int colour = (opacity & 0xFF) << 24;
        canvas.drawColor(colour, PorterDuff.Mode.DST_IN);
        return mutableBitmap;
    }
    

    请看这里的解释: http://blog.uncommons.org/2011/01/12/adjusting-the-opacity-of-an-android-bitmap/

    在博客文章中,它会检查位图是否可变 - 如果位图是可变的但没有配置 ARGB_8888,这可能会导致问题 - 所以请改用我的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多