Android中Bitmap对象和字节流之间的相互转换

时间:2024-08-19 12:04:20
  1. android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
  2. import java.io.BufferedOutputStream;  
  3. import java.io.ByteArrayOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import android.graphics.Bitmap;  
  9. import android.graphics.BitmapFactory;  
  10. import android.graphics.Matrix;  
  11. public class ImageDispose {  
  12.     /** 
  13.      * @param 将图片内容解析成字节数组 
  14.      * @param inStream 
  15.      * @return byte[] 
  16.      * @throws Exception 
  17.      */  
  18.     public static byte[] readStream(InputStream inStream) throws Exception {  
  19.         byte[] buffer = new byte[1024];  
  20.         int len = -1;  
  21.         ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
  22.         while ((len = inStream.read(buffer)) != -1) {  
  23.             outStream.write(buffer, 0, len);  
  24.         }  
  25.         byte[] data = outStream.toByteArray();  
  26.         outStream.close();  
  27.         inStream.close();  
  28.         return data;  
  29.     }  
  30.     /** 
  31.      * @param 将字节数组转换为ImageView可调用的Bitmap对象 
  32.      * @param bytes 
  33.      * @param opts 
  34.      * @return Bitmap 
  35.      */  
  36.     public static Bitmap getPicFromBytes(byte[] bytes,  
  37.             BitmapFactory.Options opts) {  
  38.         if (bytes != null)  
  39.             if (opts != null)  
  40.                 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,  
  41.                         opts);  
  42.             else  
  43.                 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);  
  44.         return null;  
  45.     }  
  46.     /** 
  47.      * @param 图片缩放 
  48.      * @param bitmap 对象 
  49.      * @param w 要缩放的宽度 
  50.      * @param h 要缩放的高度 
  51.      * @return newBmp 新 Bitmap对象 
  52.      */  
  53.     public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h){  
  54.         int width = bitmap.getWidth();  
  55.         int height = bitmap.getHeight();  
  56.         Matrix matrix = new Matrix();  
  57.         float scaleWidth = ((float) w / width);  
  58.         float scaleHeight = ((float) h / height);  
  59.         matrix.postScale(scaleWidth, scaleHeight);  
  60.         Bitmap newBmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,  
  61.                 matrix, true);  
  62.         return newBmp;  
  63.     }  
  64.     /** 
  65.      * 把Bitmap转Byte 
  66.      */  
  67.     public static byte[] Bitmap2Bytes(Bitmap bm){  
  68.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  69.         bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  
  70.         return baos.toByteArray();  
  71.     }  
  72.     /** 
  73.      * 把字节数组保存为一个文件 
  74.      */  
  75.     public static File getFileFromBytes(byte[] b, String outputFile) {  
  76.         BufferedOutputStream stream = null;  
  77.         File file = null;  
  78.         try {  
  79.             file = new File(outputFile);  
  80.             FileOutputStream fstream = new FileOutputStream(file);  
  81.             stream = new BufferedOutputStream(fstream);  
  82.             stream.write(b);  
  83.         } catch (Exception e) {  
  84.             e.printStackTrace();  
  85.         } finally {  
  86.             if (stream != null) {  
  87.                 try {  
  88.                     stream.close();  
  89.                 } catch (IOException e1) {  
  90.                     e1.printStackTrace();  
  91.                 }  
  92.             }  
  93.         }  
  94.         return file;  
  95.     }  
  96. }