android之bitmap詳解

主要介紹加載位圖的5中方式:


package com.ghg.BitmapLoad;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class Day0702_BitmapLoadActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initView();
    }
    private ImageView imageView;
	private void initView() {
		// TODO Auto-generated method stub
		imageView=(ImageView) findViewById(R.id.iv_image);
	}
	
	public void doClick(View view){
		/**
		 * 1 .【加載位圖】通過文件路徑加載位圖,顯示原圖,大小比例不變
		 */
		
		/*  Bitmap bmp=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg");
			imageView.setImageBitmap(bmp);  */
		
		/**
		 * 2.【加載位圖】通過文件路徑加載位圖,(若scale 值爲n>1) 則圖片長,寬變爲原來的1/n,相當於把圖片壓縮到
		 * 原來的1/(n*n),加載到手機內存佔用的空間小,我們可以再xml文件中設置ImageView的scaleType=fitCenter屬性,
		 * 進行拉伸自適應操作,拉伸後的圖像不是很清楚,但還是可以接受的。
		 * 
		 *    
		 */
		
		/*Options options=new Options();
		options.inSampleSize=2; 
		Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", options);
		imageView.setImageBitmap(bm);*/
		
		/**
		 * 3.【加載位圖】通過文件路徑加載位圖,此種方式,可以把原圖縮小,或放大。
		 *    下面例子是先壓縮再放大。
		 */
		Options opts=new Options();
		//設置僅加載位圖邊界信息(相當於位圖的信息,但沒有加載位圖)
		opts.inJustDecodeBounds=true;
		//加載指定路徑圖片的邊界信息,保存到opts中
		BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);
		//計算收縮比例
		int xScale=opts.outWidth/200;
		int yScale=opts.outHeight/200;
		opts.inSampleSize=xScale>yScale?xScale:yScale;
		//設置加載邊界信息爲false
		opts.inJustDecodeBounds=false;
		Bitmap bm=BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg", opts);
		imageView.setImageBitmap(bm);
		
		/**
		 * 4.【加載位圖】通過輸入流加載位圖
		 */
		
		/*FileInputStream is;
		try {
			is = new FileInputStream("/mnt/sdcard/dog.jpg");
			Bitmap bm=BitmapFactory.decodeStream(is);
			imageView.setImageBitmap(bm);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		
		/**
		 * 5.【加載位圖】通過字節數組加載位圖,圖片長,寬減半;
		 */
		//從網絡上讀取圖片的字符串數組(輸入流)
		//字節數組輸出流
		/*ByteArrayOutputStream out;
		try {
			FileInputStream fis=new FileInputStream("/mnt/sdcard/dog.jpg");
			BufferedInputStream bis=new BufferedInputStream(fis);
			out = new ByteArrayOutputStream();
			int hasRead=0;
			byte[] buffer=new byte[1024*2];
			while((hasRead=bis.read(buffer))>0){
				//讀出多少數據,向輸出流中寫入多少
				out.write(buffer);
				out.flush();
			}
			out.close();
			fis.close();
			bis.close();
			byte[] data=out.toByteArray();
			//長寬減半
			Options opts=new Options();
			opts.inSampleSize=2;
			Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length, opts);
			imageView.setImageBitmap(bm);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章