android图片的缩放、圆角处理

android中图片缩放方法有三种:1,bitmapFactory;2,bitmap+metrix;3,thumbUtil

方法一:bitmapFactory:

public static Bitmap resizeBitmapByFactory(String path, int w, int h) {
        BitmapFactory.Options option = new BitmapFactory.Options();
        option.inJustDecodeBounds = true;
        Bitmap bitmap = BitmapFactory.decodeFile(path, option);
        int outWidth = option.outWidth;
        int outHeight = option.outHeight;
        option.inDither = false;
        option.inPreferredConfig = Bitmap.Config.ARGB_8888;

        if (outWidth != 0 && outHeight != 0 && w != 0 && h != 0) {
            int sampleSize = (outWidth / w + outHeight / h) / 2;
            option.inSampleSize = sampleSize;
        }

        option.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(path, option);

    }

方法二:bitmap+metrix

public static Bitmap resizeBitmapByMetrix(Bitmap bitmap, int w, int h) {
        Bitmap BitmapOrg = bitmap;
        int width = BitmapOrg.getWidth();
        int height = BitmapOrg.getHeight();
        int newWidth = w;
        int newHeight = h;

        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        // if you want to rotate the Bitmap
        // matrix.postRotate(45);
        Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0, 0, width,
                height, matrix, true);
        return resizedBitmap;
    }

方法三,使用系统自带的thumbutil:

 

public static Bitmap resizeBitmapByUtil(Bitmap bitmap, int w, int h) {
        return ThumbnailUtils.extractThumbnail(bitmap, w, h);
    }

三个方法消耗的时间为:72,9,13不过怀疑方法一消耗的时间有可能是由于从文件中加载图片所致。这点待定

二、实现图片的圆角效果

public static Bitmap toRoundCornerBitmap(Bitmap bitmap, int cornerPixel) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Config.ARGB_8888);

        Canvas canvas = new Canvas(output);

        final int color = 0xff424242;

        final Paint paint = new Paint();

        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

        final RectF rectF = new RectF(rect);

        final float roundPx = cornerPixel;

        paint.setAntiAlias(true);

        canvas.drawARGB(0, 0, 0, 0);

        paint.setColor(color);

        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

        canvas.drawBitmap(bitmap, rect, rect, paint);
        return output;
    }

三、实现图片缩放,背景为圆角图片,则这个背景可以用图形资源文件来实现。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <gradient  
        android:angle="90"  
        android:endColor="#00000000"  
        android:startColor="#00000000" />  
  
    <corners  
        android:bottomLeftRadius="12dp"  
        android:bottomRightRadius="12dp"  
        android:topLeftRadius="12dp"  
        android:topRightRadius="12dp" />  
  
    <stroke  
        android:width="1dip"  
        android:color="#eee" />  
    <solid
        android:color="#000"/>
    <padding 
        android:top="5dp"
        android:bottom="5dp"/>
    

</shape>

 

 

 

 

 

posted @ 2013-07-10 20:53  bobo的学习笔记  阅读(664)  评论(0编辑  收藏  举报