android压缩图片Demo 博客分类: Android android图片压缩java
程序员文章站
2024-03-25 21:01:40
...
1、环境
在手机SD卡上有一张图片,图上相对较大,如果直接用读取文件的方式将图片读取出来有可能会出现内存益处,这里就必须要将图片压缩读取才能保证不出现内存益处错误
2、代码中需要用到的类方法及其主要作用
2.1 Environment:主要是用于获取SD卡的路径信息
2.2 AsyncTask:异步任务,用于耗时操作实现异步功能
2.3 doInBackground(),AsyncTask子类的实现方法,该方法运行在工作线程上,主要用于执行一些耗时操作。
2.4 onPostExecute() AsyncTask子类的实现方法,该方法运行在主线程上,主要用于更新UI操作。
2.5 Options 通过此类封装一些压缩的配置信息
2.6 opts.inJustDecodeBounds 通过该属性的设置BitmapFactory.decodeFile()只读取图片的边界信息(长和宽并将读取到的边界信息存入Options对象中
2.7 BitmapFactory 读取图片信息封装类
2.8 DisplayMetrics 获取屏幕信息
3.代码实现
在手机SD卡上有一张图片,图上相对较大,如果直接用读取文件的方式将图片读取出来有可能会出现内存益处,这里就必须要将图片压缩读取才能保证不出现内存益处错误
2、代码中需要用到的类方法及其主要作用
2.1 Environment:主要是用于获取SD卡的路径信息
2.2 AsyncTask:异步任务,用于耗时操作实现异步功能
2.3 doInBackground(),AsyncTask子类的实现方法,该方法运行在工作线程上,主要用于执行一些耗时操作。
2.4 onPostExecute() AsyncTask子类的实现方法,该方法运行在主线程上,主要用于更新UI操作。
2.5 Options 通过此类封装一些压缩的配置信息
2.6 opts.inJustDecodeBounds 通过该属性的设置BitmapFactory.decodeFile()只读取图片的边界信息(长和宽并将读取到的边界信息存入Options对象中
2.7 BitmapFactory 读取图片信息封装类
2.8 DisplayMetrics 获取屏幕信息
3.代码实现
package com.example.compressedimage; import java.io.File; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; import android.util.DisplayMetrics; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.imageView1); /**取得SD卡存储图片的路径*/ File fileDir = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); /**创建图片文件*/ File file = new File(fileDir, "wf.jpg"); ImageTask iTask = new ImageTask(); /**从线程池THREAD_POOL_EXECUTOR获取线程执行异步操作*/ iTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, file); } /** * 图片读取异步类,用于压缩图片及将图片更新到UI上 * @author Leiht */ class ImageTask extends AsyncTask<File, Void, Bitmap> { /**此方法运行在工作线程上,通常用于执行耗时的操作(如读取较大的图片音乐文件等*/ @Override protected Bitmap doInBackground(File... params) { /**通过此类封装一些压缩的配置信息*/ Options opts = new Options(); /**通过该属性的设置使BitmapFactory.decodeFile()只读取图片的边界信息(长和宽 * 并将读取到的边界信息存入Options对象中*/ opts.inJustDecodeBounds = true; /**开始读取指定图片的边界信息*/ BitmapFactory.decodeFile(params[0].getPath(), opts); /**获取图片的边界信息*/ int weight = opts.outWidth; int height = opts.outHeight; /**获取屏幕信息*/ DisplayMetrics dm = new DisplayMetrics(); /**将window窗口的显示信息封装到DisplayMetrics对象*/ getWindowManager().getDefaultDisplay().getMetrics(dm); /**节能屏幕的宽度和高度(以象素为单位)*/ int dp = dm.widthPixels; int hp = dm.heightPixels; /**设置压缩比例,压缩比例算法自己确定*/ int x = weight/dp; int y = height/hp; if(x >= y && x > 1) { opts.inSampleSize = x; }else if(y > x && y > 1) { opts.inSampleSize = y; }else { //默认取8 opts.inSampleSize = 8; } /**通过该属性的设置使BitmapFactory.decodeFile()以字节的方式读取图片*/ opts.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(params[0].getPath(), opts); return bitmap; } /** * 此方法在主线程中执行,用于更新UI界面 */ @Override protected void onPostExecute(Bitmap result) { /**显示图片到ImageView*/ iv.setImageBitmap(result); } } }
推荐阅读
-
【转】Java高性能Web开发(1)-图片压缩 博客分类: 性能优化 性能优化web前端图片压缩
-
android压缩图片Demo 博客分类: Android android图片压缩java
-
图片压缩 博客分类: Java 图片压缩
-
安卓中图片上传,小图预览,可删除 博客分类: 移动开发android android图片上传缩略图GridView
-
android图片特效,图片过滤 博客分类: android 图片处理 android图片特效android图片过滤图片处理android
-
ImageView 博客分类: Android控件常用属性 androidImageViewBitmap图片处理
-
android图片处理方法 博客分类: it_android_image image图片处理各种图片处理效果android
-
android图片选取与调用系统裁剪 博客分类: android
-
android图片选取与调用系统裁剪 博客分类: android
-
Android实现文件压缩与解压缩 博客分类: Android Android压缩解压缩