2011-09-12 39 views
1

である私は、私はこのコードを使用し、半透明のビットマップを作成しようとしています:アンドロイド半透明のビットマップの背景が黒

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

唯一の問題は、背景(透明)色は常に黒です - どのように私はこれを変更することができます背景色を完全に透明にし、残りを半透明にしますか?

答えて

2

使用ビットマップを透明にするには、この方法:

/** 
* @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の設定がない場合は、代わりにmyメソッドを使用してください。

関連する問題