zoukankan      html  css  js  c++  java
  • Android Bitmap Drawable byte[] InputStream 相互转换方法

    用android处理图片的时候,由于得到的资源不一样,所以经常要在各种格式中相互转化,以下介绍了 Bitmap Drawable byte[] InputStream 之间的转换方法:

    
    import java.io.ByteArrayInputStream;  
    import java.io.ByteArrayOutputStream;  
    import java.io.InputStream;   
    import android.graphics.Bitmap;  
    import android.graphics.BitmapFactory;  
    import android.graphics.Canvas;  
    import android.graphics.PixelFormat;  
    import android.graphics.drawable.BitmapDrawable;  
    import android.graphics.drawable.Drawable;  
    
    /** 
     * Bitmap与DrawAble与byte[]与InputStream之间的转换工具类 
     * @author Administrator 
     * 
     */  
    public class FormatTools {  
        private static FormatTools tools = new FormatTools();  
    
        public static FormatTools getInstance() {  
            if (tools == null) {  
                tools = new FormatTools();  
                return tools;  
            }  
            return tools;  
        }  
    
        // 将byte[]转换成InputStream  
        public InputStream Byte2InputStream(byte[] b) {  
            ByteArrayInputStream bais = new ByteArrayInputStream(b);  
            return bais;  
        }  
    
        // 将InputStream转换成byte[]  
        public byte[] InputStream2Bytes(InputStream is) {  
            String str = "";  
            byte[] readByte = new byte[1024];  
            int readCount = -1;  
            try {  
                while ((readCount = is.read(readByte, 0, 1024)) != -1) {  
                    str += new String(readByte).trim();  
                }  
                return str.getBytes();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            return null;  
        }  
    
        // 将Bitmap转换成InputStream  
        public InputStream Bitmap2InputStream(Bitmap bm) {  
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);  
            InputStream is = new ByteArrayInputStream(baos.toByteArray());  
            return is;  
        }  
    
        // 将Bitmap转换成InputStream  
        public InputStream Bitmap2InputStream(Bitmap bm, int quality) {  
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            bm.compress(Bitmap.CompressFormat.PNG, quality, baos);  
            InputStream is = new ByteArrayInputStream(baos.toByteArray());  
            return is;  
        }  
    
        // 将InputStream转换成Bitmap  
        public Bitmap InputStream2Bitmap(InputStream is) {  
            return BitmapFactory.decodeStream(is);  
        }  
    
        // Drawable转换成InputStream  
        public InputStream Drawable2InputStream(Drawable d) {  
            Bitmap bitmap = this.drawable2Bitmap(d);  
            return this.Bitmap2InputStream(bitmap);  
        }  
    
        // InputStream转换成Drawable  
        public Drawable InputStream2Drawable(InputStream is) {  
            Bitmap bitmap = this.InputStream2Bitmap(is);  
            return this.bitmap2Drawable(bitmap);  
        }  
    
        // Drawable转换成byte[]  
        public byte[] Drawable2Bytes(Drawable d) {  
            Bitmap bitmap = this.drawable2Bitmap(d);  
            return this.Bitmap2Bytes(bitmap);  
        }  
    
        // byte[]转换成Drawable  
        public Drawable Bytes2Drawable(byte[] b) {  
            Bitmap bitmap = this.Bytes2Bitmap(b);  
            return this.bitmap2Drawable(bitmap);  
        }  
    
        // Bitmap转换成byte[]  
        public byte[] Bitmap2Bytes(Bitmap bm) {  
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  
            return baos.toByteArray();  
        }  
    
        // byte[]转换成Bitmap  
        public Bitmap Bytes2Bitmap(byte[] b) {  
            if (b.length != 0) {  
                return BitmapFactory.decodeByteArray(b, 0, b.length);  
            }  
            return null;  
        }  
    
        // Drawable转换成Bitmap  
        public Bitmap drawable2Bitmap(Drawable 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转换成Drawable  
        public Drawable bitmap2Drawable(Bitmap bitmap) {  
            BitmapDrawable bd = new BitmapDrawable(bitmap);  
            Drawable d = (Drawable) bd;  
            return d;  
        }  
    }  
  • 相关阅读:
    可重入锁 RLOCK(转)
    python 全局变量的简单理解
    urlopen设置代理方法
    python is id == 的差别,cmp方法
    FutureTask
    Java基础复习
    计算机编程底层基础
    Microsoft.NET框架程序设计20 CLR寄宿、应用程序域、反射
    Microsoft.NET框架程序设计19 自动内存管理(垃圾收集)
    Microsoft.NET框架程序设计17 委托
  • 原文地址:https://www.cnblogs.com/yelanggu/p/9752844.html
Copyright © 2011-2022 走看看