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