在读取图片的时候压缩减小内存开支
来源:互联网 发布:淘宝宝贝数据包下载 编辑:程序博客网 时间:2024/04/28 23:31
这个问题真是把我折腾的够呛:
package com.example.tupian;import java.io.IOException;import java.io.InputStream;import java.net.URL;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.annotation.SuppressLint;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.Drawable;import android.util.Log;import android.view.Menu;import android.widget.ImageView;import android.widget.Toast;@SuppressLint("NewApi")public class MainActivity extends Activity {private static Bitmap bitm;private static Bitmap bitm2;private ImageView iv;private ImageView iv2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); iv = (ImageView)findViewById(R.id.iv); iv2 = (ImageView)findViewById(R.id.iv2); Thread t = new Thread(new imgThred()); t.start();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}class imgThred implements Runnable{ public void run(){//dd= getDrawable("http://smartcost.com.cn/global/upload/img/20140520/1400549692206.jpg"); try {bitm = revitionImageSize("http://smartcost.com.cn/global/upload/img/20140520/1400549692206.jpg",300);bitm2 = revitionImageSize("http://smartcost.com.cn/global/upload/img/20140520/1400549692206.jpg",150); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}msHandl.sendMessage(new Message());}}Handler msHandl = new Handler(){@Overridepublic void handleMessage(Message msg) {iv.setImageBitmap(bitm);iv2.setImageBitmap(bitm2);}};private Bitmap revitionImageSize(String path, int size) throws IOException { URL url; url = new URL(path); // 取得图片 InputStream temp = url.openStream(); BitmapFactory.Options options = new BitmapFactory.Options(); // 这个参数代表,不为bitmap分配内存空间,只记录一些该图片的信息(例如图片大小),说白了就是为了内存优化 options.inJustDecodeBounds = true; // 通过创建图片的方式,取得options的内容(这里就是利用了java的地址传递来赋值) BitmapFactory.decodeStream(temp, null, options); // 关闭流 temp.close(); // 生成压缩的图片 int i = 0; Bitmap bitmap = null; while (true) { // 这一步是根据要设置的大小,使宽和高都能满足 if ((options.outWidth >> i <= size) && (options.outHeight >> i <= size)) { // 重新取得流,注意:这里一定要再次加载,不能二次使用之前的流! temp = url.openStream(); // 这个参数表示 新生成的图片为原始图片的几分之一。 options.inSampleSize = (int) Math.pow(2.0D, i); // 这里之前设置为了true,所以要改为false,否则就创建不出图片 options.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeStream(temp, null, options); break; } i += 1; } double bitcount =bitmap.getByteCount()/1000;Log.e("bitcount", bitcount+"");return bitmap;}}
2、从资源中获取Bitmap
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
另外附上bitmap和SD卡的操作哦:http://blog.sina.com.cn/s/blog_a72ec20c01015rwj.html
唉,虽然今天晚上弄到现在,但明天到公司又是一场恶战。。。
1 0
- 在读取图片的时候压缩减小内存开支
- 在读取流的时候的异常java.io.EOFException
- 在读取java文件的时候用到了递归
- 在读取网络资源的时候发现太小,怎么办
- php模拟登录 获取SESSIONID,并则在读取网页的时候发送
- Java在读取文件内容的时候,如何判断出空白行
- 在读取视频时动态保存图片
- php内存泄漏的解决方案(在读取大数量时遇到的问题 sphinx查询)
- 在读取数据的时候竟然出现 了 can not re-read column的错误,jdbc的错误
- istringstream在读文件时候的应用
- 在读取Socket时注意的问题
- 减小app大小的方法——iOS开发用ImageOptim压缩png图片
- 网页图片的压缩——保持尺寸不变,减小图片大小
- 减小apk体积之减小图片的大小
- 如何在读文件的时候区分中文还是英文
- 在读写二进制数据的时候,一定要用"rb”,“wb”
- 在读取DevExpress.XtraGrid的childrow时遇到的问题
- 应用程序最小化之后内存减小的原因
- Java基础知识之典型范例一——诺诺"涂鸦"记忆
- WPF DataPicker修改默认的水印文本
- HDOJ A + B Problem II(编程基础)
- C# 集合类型
- 实现图标的动态变换:
- 在读取图片的时候压缩减小内存开支
- rstplib源码分析---快速生成树之端口信息状态机
- 七个受用一生的心理寓言
- android开发生成apk后在真机上安装出错-提示解析包出现问题和无法安装
- Android 初始化本地数据库
- MIPS处理器的uboot怎么写
- Test blog publishing
- 人生处世四大秘诀
- Unity3d一些常见笔试题推荐了