安卓小项目:如何在手机屏幕上显示大内存图片

今天做了个小项目,使用ImageView控件显示一张20M大图片,用BitmapFactory.decodeResources()方法可以获得图片资源,但是在模拟器上运行会出错。出错代码如下:

网上查找解决方法,该问题为图片溢出(简单说图片太大了,手机运行不了)可以使用BitmapFactory.options类的decodeStream()方法解决,代码如下:

 1 package com.example.localpicture;
 2 
 3 import java.io.InputStream;
 4 import android.net.Uri;
 5 import android.os.Bundle;
 6 import android.util.Log;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 import android.widget.ImageView;
11 import android.app.Activity;
12 import android.content.Intent;
13 import android.graphics.Bitmap;
14 import android.graphics.BitmapFactory;
15 
16 public class LocalPicture extends Activity {
17     private Button button;
18     private ImageView image;
19     InputStream is;
20 
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_local_picture);
25         button = (Button) findViewById(R.id.button);
26         image = (ImageView) findViewById(R.id.imagView);
27         is = this.getResources().openRawResource(R.drawable.big);
28         button.setOnClickListener(new OnClickListener() {
29             @Override
30             //创建监听事件
31             public void onClick(View v) {
32                 // TODO Auto-generated method stub
33                 //获取手机屏幕大小
34                 int dw = getWindowManager().getDefaultDisplay().getWidth();
35                 int dh = getWindowManager().getDefaultDisplay().getHeight();
36                 //读取图片的尺寸,按手机尺寸等比例缩小后读取图片资源
37                 try {
38                     BitmapFactory.Options options = new BitmapFactory.Options();
39                     //获取图片尺寸,不装载资源
40                     options.inJustDecodeBounds = true;
41                     Bitmap bitmap = BitmapFactory.decodeStream(is, null,
42                             options);
43                     int wRatio = (int) Math.ceil(options.outWidth / dw);
44                     int hRatio = (int) Math.ceil(options.outHeight / dh);
45                     if (wRatio > 1 || hRatio > 1) {
46                         if (wRatio > hRatio) {
47                             //将图片按wRatio:1比例缩小
48                             options.inSampleSize = wRatio;
49                         } else {
50                             options.inSampleSize = hRatio;
51                         }
52                     }
53                     //读取缩小后的图片资源
54                     options.inJustDecodeBounds = false;
55                     bitmap = BitmapFactory.decodeStream(is, null, options);
56                     image.setImageBitmap(bitmap);
57                     Log.d("test", "加载成功");
58 
59                 } catch (Exception e) {
60                     // TODO: handle exception
61                 }
62             }
63         });
64     }
65 
66 }

好,运行项目,点击按钮,可以读取20M极端大图片按手机屏幕等比例缩小的图片:


第一次写技术博客,写得不好,希望大牛别吐坏水。也希望园友可以和我交流学习。


转载于:https://www.cnblogs.com/jimmyyy/p/BitPictureShow.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值