bitmap相关工具类

一,bitmap工具

封装了以下方法:

1,获取activity屏幕截图,保存为图片文件

2,从文件中获取截图,返回bitmap对象

package com.ctbri.weather.utils;

import java.io.File;
import java.io.FileOutputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Rect;
import android.os.Environment;
import android.view.View;

public class BitmapUtil {
    /**
     * 从文件中加载图片的缩略图
     * 
     * @param path
     *            文件路径
     * @return
     */
    public static Bitmap loadThumbnail(String path) {

        BitmapFactory.Options opts = new Options();
        opts.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, opts);
        int width = opts.outWidth;
        int height = opts.outHeight;
        int windowwidth = 48;
        int windowheigth = 85;

        int scalex = width / windowwidth;
        int scaley = height / windowheigth;

        if (scalex > scaley && scaley > 1) { // 姘村钩鏂瑰悜鐨勭缉鏀炬瘮渚嬫瘮杈冨ぇ
            opts.inSampleSize = scalex;
        }
        if (scaley > scalex && scalex > 1) { // 绔栫洿鏂瑰悜鐨勭缉鏀炬瘮渚嬫瘮杈冨ぇ
            opts.inSampleSize = scaley;
        }
        opts.inJustDecodeBounds = false;
        Bitmap bitmap = BitmapFactory.decodeFile(path, opts);

        return bitmap;

    }
    /**
     * 获取acitivy屏幕截图工具
     * @param activity需要截图的ctivity
     * @param v 该acitivy上的一个view控件
     * @return 返回截图的存储路径
     */
    public static String getscreen(Activity activity,View v) {
        String fname = "/mnt/sdcard/";

        File file = new File(
                Environment
                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                "eweather");
        if (!file.exists()) {
            file.mkdirs();
        }
        fname = new File(file.getPath() + File.separator 
                + "shareimg" + ".jpg").getAbsolutePath();
        View view = v.getRootView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bitmap = view.getDrawingCache();

        if (bitmap != null) {
            try {
                FileOutputStream out = new FileOutputStream(fname);
                //鑾峰彇鐘舵�鏍忛珮搴�
                Rect frame = new Rect(); 
                activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); 
                int statusBarHeight = frame.top; 
                //鑾峰彇灞忓箷闀垮拰楂�
                 int width = activity.getWindowManager().getDefaultDisplay().getWidth(); 
                int height = activity.getWindowManager().getDefaultDisplay().getHeight(); 
                //鍘绘帀鏍囬鏍�
                bitmap = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width, height - statusBarHeight); 
                view.destroyDrawingCache(); 
                
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                bitmap.recycle();
                bitmap=null;

            } catch (Exception e) {
                e.printStackTrace();
            }

        } else {
            System.out.println("bitmapis NULL!");
        }
        return fname;

    }

}

二、实现bitmap,drawable,byte【】之间的转换

package com.ctbri.weather.utils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;

public class ByteUtil {

    public static byte[] read(String path) {
        ByteArrayOutputStream outputStream = null;
        try {
            File imageFile = new File(path);
            FileInputStream inputStream = new FileInputStream(imageFile);
            outputStream = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, len);
            }
            inputStream.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return outputStream.toByteArray();
    }

    public static byte[] Bitmap2Bytes(Bitmap bm) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }

    public synchronized static byte[] drawableToByte(Drawable drawable) {

        if (drawable != null) {
            Bitmap bitmap = Bitmap
                    .createBitmap(
                            drawable.getIntrinsicWidth(),
                            drawable.getIntrinsicHeight(),
                            drawable.getOpacity() != PixelFormat.JPEG ? Bitmap.Config.ARGB_8888
                                    : Bitmap.Config.RGB_565);
            Canvas canvas = new Canvas(bitmap);
            bitmap.recycle();
            bitmap = null;
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
                    drawable.getIntrinsicHeight());
            drawable.draw(canvas);
            int size = bitmap.getWidth() * bitmap.getHeight() * 4;
            ByteArrayOutputStream baos = new ByteArrayOutputStream(size);
            bitmap.compress(Bitmap.CompressFormat.PNG, 50, baos);
            byte[] imagedata = baos.toByteArray();
            return imagedata;
        }
        return null;
    }
}

 关于这一点,自己的另外一篇博客有更详细的讨论,包括view,bitmap,drawable,byte[]之间的相互转换

http://www.cnblogs.com/bobodeboke/archive/2013/05/09/3069415.html

 

 

posted @ 2013-07-05 11:29  bobo的学习笔记  阅读(740)  评论(0编辑  收藏  举报