Android Bitmap图片缩放优化,用canvas替代Matrix进行缩放,解决一些错我

来源:互联网 发布:中国网络暴力现状 编辑:程序博客网 时间:2024/06/05 06:12

前面用Matrix来缩放Bitmap,发现有些情况下会抛出错误,导致图片空白。

    /**     * 缩放     *     * @param bm     * @param newWidth     * @param newHeight     * @return     *///    public synchronized static Bitmap scaleImage(boolean isApplyRadio,Bitmap bm, int newWidth, int newHeight) {////        //应用图标缩放//        if(isApplyRadio&&iconScaleRadio!=1f){//            newWidth= (int) (newWidth*iconScaleRadio);//            newHeight= (int) (newHeight*iconScaleRadio);//        }////        if (bm == null) {//            return null;//        }//        int width = bm.getWidth();//        int height = bm.getHeight();//        float scaleWidth = ((float) newWidth) / width;//        float scaleHeight = ((float) newHeight) / height;//        Matrix matrix = new Matrix();//        matrix.postScale(scaleWidth, scaleHeight);//        Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);//        if (bm != null & !bm.isRecycled()) {//            bm.recycle();//            bm = null;//        }//        return newbm;//    }



下面采用Cavans来缩放图片,就不会有问题了。

 private  static PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);    public synchronized static Bitmap scaleImageCavans(boolean isApplyRadio,Bitmap bm, int newWidth, int newHeight) {        //应用图标缩放        if(isApplyRadio&&iconScaleRadio!=1f){            newWidth= (int) (newWidth*iconScaleRadio);            newHeight= (int) (newHeight*iconScaleRadio);        }        if (bm == null) {            return null;        }        int width = bm.getWidth();        int height = bm.getHeight();        float scaleWidth = ((float) newWidth) / width;        float scaleHeight = ((float) newHeight) / height;        Bitmap newbm = Bitmap.createBitmap(newWidth, newWidth,                Bitmap.Config.ARGB_8888);        mCanvas.setBitmap(newbm);        mPaint.setXfermode(null);        mPaint.setAntiAlias(true);        mCanvas.save();        mCanvas.scale(scaleWidth, scaleHeight);        //保证图标不失真        mCanvas.setDrawFilter(pfd);        mCanvas.drawBitmap(bm,0,0,null);        mCanvas.restore();        if (bm != null & !bm.isRecycled()) {            bm.recycle();            bm = null;        }        return newbm;    }



0 0
原创粉丝点击