android修改图片透明度(通透)

两种思路,第一种思路是通过对Bitmap进行操作,将Bitmap的像素值get到一个int[]数组里,因为在Android里Bitmap通常是ARGB8888格式,所以最高位就是A通道的值,对齐进行改变后再新建一个Bitmap即可。第二种思路是通过设置canvas的paint的透明度,然后通过canvas.drawBitmap()来改变View的透明度。具体代码如下:

第一种思路:

[java]  view plain  copy
 print ?
  1. public static Bitmap getTransparentBitmap(Bitmap sourceImg, int number){  
  2.         int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()];  
  3.   
  4.         sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 00, sourceImg  
  5.   
  6.                 .getWidth(), sourceImg.getHeight());// 获得图片的ARGB值  
  7.   
  8.         number = number * 255 / 100;  
  9.   
  10.         for (int i = 0; i < argb.length; i++) {  
  11.   
  12.             argb[i] = (number << 24) | (argb[i] & 0x00FFFFFF);  
  13.   
  14.         }  
  15.   
  16.         sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg  
  17.   
  18.                 .getHeight(), Config.ARGB_8888);  
  19.   
  20.         return sourceImg;  
  21.     }  

上述代码经本人亲测可用,修正了 链接  的两个错误。number的范围是0-100,0表示完全透明即完全看不到。可以看到最关键的一步是argb[i] = (number << 24) | (argb[i] & 0x00FFFFFF); 通过 (argb[i] & 0x00FFFFFF)将第i点的像素的A通道置为0,然后和(num<<24)进行或操作。移位参见 链接

第二种思路:

示例代码:

[java]  view plain  copy
 print ?
  1. class drawCanvas extends View {  
  2.     public drawCanvas(Context context) {  
  3.         super(context);  
  4.     }  
  5.   
  6.     @Override  
  7.     protected void onDraw(Canvas canvas) {  
  8.         super.onDraw(canvas);  
  9.   
  10.         // 取得Resource 图片的Bitmap  
  11.         Bitmap vBitmap = BitmapFactory.decodeResource( this.getResources()  
  12.                                                      , R.drawable.icon  
  13.                                                      );  
  14.   
  15.         // 建立Paint 物件  
  16.         Paint vPaint = new Paint();  
  17.         vPaint .setStyle( Paint.Style.STROKE );   //空心  
  18.         vPaint .setAlpha( 75 );   //   
  19.   
  20.         canvas.drawBitmap ( vBitmap , 50100null );  //无透明  
  21.         canvas.drawBitmap ( vBitmap , 50200, vPaint );  //有透明  
  22.     }  

猜你喜欢

转载自blog.csdn.net/liangtianmeng/article/details/77152196