主要介紹加載位圖的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();
}*/
}
}