1、android中将图像进行透明度的处理
其中setPixel时总是错误是图片是不可mutable(修改、改变)。,调用copy函数copy图片后仍不行,最后用createBitmap解决问题的且效率更高。
方式一:这种方法针对与处理图像中的某些像素时候使用
public Bitmap getTranslateImage(Bitmap bitmap , int alpha)//alpha 0 - 255 { int w = bitmap.getWidth(); int h = bitmap.getHeight(); Bitmap bitmap2 = Bitmap.createBitmap(w , h , Bitmap.Config.ARGB_8888); for(int i = 0 ; i < h ; i++) for(int j = 0 ; j < w; j ++) { int argb = bitmap.getPixel(j , i ); int r =( argb>>16)&0xff; int g =( argb>>8)&0xff; int b =argb&0xff; if((r + g + b)/3 >180) { int argb2 = (alpha<<24)|(argb & 0x00ffffff); bitmap2.setPixel(j, i, argb2); } else bitmap2.setPixel(j , i , argb); } return bitmap2; }
方式二: 这种方法是针对图像整体进行改变透明度变化时候使用:巧妙的利用画布与画笔。画布和view的结合view.draw(canvas)将view的内容画到画布上,如android 截屏的实现:http://www.cnblogs.com/bokeofzp/p/6031231.html ,第8条
public Bitmap getTranslateImage2(Bitmap bitmap , int alpha) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); Bitmap bitmap2 = Bitmap.createBitmap(w , h , Bitmap.Config.ARGB_8888); // 建立Paint 物件 Paint vPaint = new Paint(); vPaint .setStyle( Paint.Style.STROKE ); //空心 vPaint .setAlpha( alpha ); // Canvas canvas = new Canvas(bitmap2); //利用bitmap2作为画布 // canvas.drawBitmap ( bitmap , 0, 0, null ); //无透明 canvas.drawBitmap ( bitmap , 0, 0, vPaint ); //有透明 ,将bitmap的图像画到画布上 return bitmap2; }