码迷,mamicode.com
首页 > 移动开发 > 详细

Android-BitmapUtil工具类

时间:2018-09-14 18:27:25      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:contex   rac   nsa   计算   out   factor   canvas   返回   decode   

Bitmap工具类,获取Bitmap对象
public class BitmapUtil {

    private BitmapUtil(){}

    /**
     * 根据资源id获取指定大小的Bitmap对象
     * @param context    应用程序上下文
     * @param id        资源id
     * @param height    高度
     * @param width        宽度
     * @return
     */
    public static Bitmap getBitmapFromResource(Context context, int id, int height, int width){
        Options options = new Options();
        options.inJustDecodeBounds = true;//只读取图片,不加载到内存中
        BitmapFactory.decodeResource(context.getResources(), id, options);
        options.inSampleSize = calculateSampleSize(height, width, options);
        options.inJustDecodeBounds = false;//加载到内存中
        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), id, options);
        return bitmap;
    }

    /**
     * 根据文件路径获取指定大小的Bitmap对象
     * @param path        文件路径
     * @param height    高度
     * @param width        宽度
     * @return
     */
    public static Bitmap getBitmapFromFile(String path, int height, int width){
        if (TextUtils.isEmpty(path)) {
            throw new IllegalArgumentException("参数为空,请检查你选择的路径:" + path);
        }
        Options options = new Options();
        options.inJustDecodeBounds = true;//只读取图片,不加载到内存中
        BitmapFactory.decodeFile(path, options);
        options.inSampleSize = calculateSampleSize(height, width, options);
        options.inJustDecodeBounds = false;//加载到内存中
        Bitmap bitmap = BitmapFactory.decodeFile(path, options);
        return bitmap;
    }

    /**
     * 获取指定大小的Bitmap对象
     * @param bitmap    Bitmap对象
     * @param height    高度
     * @param width        宽度
     * @return
     */
    public static Bitmap getThumbnailsBitmap(Bitmap bitmap, int height, int width){
        if (bitmap == null) {
            throw new IllegalArgumentException("图片为空,请检查你的参数");
        }
        return ThumbnailUtils.extractThumbnail(bitmap, width, height);
    }

    /**
     * 将Bitmap对象转换成Drawable对象
     * @param context    应用程序上下文
     * @param bitmap    Bitmap对象
     * @return    返回转换后的Drawable对象
     */
    public static Drawable bitmapToDrawable(Context context, Bitmap bitmap){
        if (context == null || bitmap == null) {
            throw new IllegalArgumentException("参数不合法,请检查你的参数");
        }
        Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);
        return drawable;
    }

    /**
     * 将Drawable对象转换成Bitmap对象
     * @param drawable    Drawable对象
     * @return    返回转换后的Bitmap对象
     */
    public static Bitmap drawableToBitmap(Drawable drawable) {
        if (drawable == null) {
            throw new IllegalArgumentException("Drawable为空,请检查你的参数");
        }
        Bitmap bitmap =
                Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                        drawable.getIntrinsicHeight(),
                        drawable.getOpacity() != PixelFormat.OPAQUE? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        return bitmap;
    }

    /**
     * 将Bitmap对象转换为byte[]数组
     * @param bitmap    Bitmap对象
     * @return        返回转换后的数组
     */
    public static byte[] bitmapToByte(Bitmap bitmap){
        if (bitmap == null) {
            throw new IllegalArgumentException("Bitmap为空,请检查你的参数");
        }
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }

    /**
     * 计算所需图片的缩放比例
     * @param height    高度
     * @param width        宽度
     * @param options    options选项
     * @return
     */
    private static int calculateSampleSize(int height, int width, Options options){
        int realHeight = options.outHeight;
        int realWidth = options.outWidth;
        int heigthScale = realHeight / height;
        int widthScale = realWidth / width;
        if(widthScale > heigthScale){
            return widthScale;
        }else{
            return heigthScale;
        }
    }
}

 

Android-BitmapUtil工具类

标签:contex   rac   nsa   计算   out   factor   canvas   返回   decode   

原文地址:https://www.cnblogs.com/android-deli/p/9648073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!