android中bitmap

来源:互联网 发布:mac连接电视 编辑:程序博客网 时间:2024/06/06 00:56

主要介绍加载位图的5中方式:


[html] view plain copy
  1. package com.ghg.BitmapLoad;  
  2.   
  3. import java.io.BufferedInputStream;  
  4. import java.io.BufferedReader;  
  5. import java.io.ByteArrayOutputStream;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileNotFoundException;  
  8. import java.io.IOException;  
  9.   
  10. import android.app.Activity;  
  11. import android.graphics.Bitmap;  
  12. import android.graphics.BitmapFactory;  
  13. import android.graphics.BitmapFactory.Options;  
  14. import android.os.Bundle;  
  15. import android.view.View;  
  16. import android.widget.ImageView;  
  17.   
  18. public class Day0702_BitmapLoadActivity extends Activity {  
  19.     /** Called when the activity is first created. */  
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.main);  
  24.         initView();  
  25.     }  
  26.     private ImageView imageView;  
  27.     private void initView() {  
  28.         // TODO Auto-generated method stub  
  29.         imageView=(ImageView) findViewById(R.id.iv_image);  
  30.     }  
  31.       
  32.     public void doClick(View view){  
  33.         /**  
  34.          * 1 .【加载位图】通过文件路径加载位图,显示原图,大小比例不变  
  35.          */  
  36.           
  37.         /*  Bitmap bmp=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg");  
  38.             imageView.setImageBitmap(bmp);  */  
  39.           
  40.         /**  
  41.          * 2.【加载位图】通过文件路径加载位图,(若scale 值为n>1) 则图片长,宽变为原来的1/n,相当于把图片压缩到  
  42.          * 原来的1/(n*n),加载到手机内存占用的空间小,我们可以再xml文件中设置ImageView的scaleType=fitCenter属性,  
  43.          * 进行拉伸自适应操作,拉伸后的图像不是很清楚,但还是可以接受的。  
  44.          *   
  45.          *      
  46.          */  
  47.           
  48.         /*Options options=new Options();  
  49.         options.inSampleSize=2;   
  50.         Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", options);  
  51.         imageView.setImageBitmap(bm);*/  
  52.           
  53.         /**  
  54.          * 3.【加载位图】通过文件路径加载位图,此种方式,可以把原图缩小,或放大。  
  55.          *    下面例子是先压缩再放大。  
  56.          */  
  57.         Options opts=new Options();  
  58.         //设置仅加载位图边界信息(相当于位图的信息,但没有加载位图)  
  59.         opts.inJustDecodeBounds=true;  
  60.         //加载指定路径图片的边界信息,保存到opts中  
  61.         BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);  
  62.         //计算收缩比例  
  63.         int xScale=opts.outWidth/200;  
  64.         int yScale=opts.outHeight/200;  
  65.         opts.inSampleSize=xScale>yScale?xScale:yScale;  
  66.         //设置加载边界信息为false  
  67.         opts.inJustDecodeBounds=false;  
  68.         Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);  
  69.         imageView.setImageBitmap(bm);  
  70.           
  71.         /**  
  72.          * 4.【加载位图】通过输入流加载位图  
  73.          */  
  74.           
  75.         /*FileInputStream is;  
  76.         try {  
  77.             is = new FileInputStream("/mnt/sdcard/dog.jpg");  
  78.             Bitmap bm=BitmapFactory.decodeStream(is);  
  79.             imageView.setImageBitmap(bm);  
  80.               
  81.         } catch (FileNotFoundException e) {  
  82.             // TODO Auto-generated catch block  
  83.             e.printStackTrace();  
  84.         }*/  
  85.           
  86.         /**  
  87.          * 5.【加载位图】通过字节数组加载位图,图片长,宽减半;  
  88.          */  
  89.         //从网络上读取图片的字符串数组(输入流)  
  90.         //字节数组输出流  
  91.         /*ByteArrayOutputStream out;  
  92.         try {  
  93.             FileInputStream fis=new FileInputStream("/mnt/sdcard/dog.jpg");  
  94.             BufferedInputStream bis=new BufferedInputStream(fis);  
  95.             out = new ByteArrayOutputStream();  
  96.             int hasRead=0;  
  97.             byte[] buffer=new byte[1024*2];  
  98.             while((hasRead=bis.read(buffer))>0){  
  99.                 //读出多少数据,向输出流中写入多少  
  100.                 out.write(buffer);  
  101.                 out.flush();  
  102.             }  
  103.             out.close();  
  104.             fis.close();  
  105.             bis.close();  
  106.             byte[] data=out.toByteArray();  
  107.             //长宽减半  
  108.             Options opts=new Options();  
  109.             opts.inSampleSize=2;  
  110.             Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length, opts);  
  111.             imageView.setImageBitmap(bm);  
  112.               
  113.         } catch (FileNotFoundException e) {  
  114.             // TODO Auto-generated catch block  
  115.             e.printStackTrace();  
  116.         } catch (IOException e) {  
  117.             // TODO Auto-generated catch block  
  118.             e.printStackTrace();  
  119.         }*/  
  120.     }  
  121.       
  122.       
  123.       
  124.       
  125.       
  126.       
  127.       
  128.       
  129.       
  130.       
  131.       
  132.       
  133.       
  134.       
  135.       
  136.       
  137. }  
0 0