主要介绍加载位图的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(); }*/ } }