• 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
  • 相关阅读:
    万能分页方法!机会难得,在此送给大家
    Java长存!12个Java长久占居主要地位的原因
    angularjs1.x radio组checkbox组
    js动态显示vlc视频直播
    Lodop 分页详解,可详细了呢
    lodop 实现分页打印账单 最后一页右下角加入确认签字
    lodop分页,页眉页脚,foreach分页代码
    ajax最简单验证
    Httpcilent获取带验证码的网站内容
    设计模式(转载)
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3173385.html
Copyright © 2020-2023  润新知