图像透明化

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 Code

 方式二: 这种方法是针对图像整体进行改变透明度变化时候使用:巧妙的利用画布与画笔。画布和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;
    }
View Code

 

posted @ 2016-11-10 18:00  Lammy  阅读(346)  评论(0编辑  收藏  举报