博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查看Android系统图片(缩放)
阅读量:6896 次
发布时间:2019-06-27

本文共 4762 字,大约阅读时间需要 15 分钟。

本文主要展示Android系统图片的查看,选取后进行缩放后再展现

main.xml

MainActivity:

public class MainActivity extends Activity {        private static final String SAVE_PATH = Environment.getExternalStorageDirectory() + "/lanyan/";    private ImageView imageView;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                setContentView(R.layout.main);                Button button = (Button) findViewById(R.id.button1);        imageView = (ImageView)findViewById(R.id.imageview1);                button.setOnClickListener(new View.OnClickListener() {                        @Override            public void onClick(View v) {                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);                intent.setType("image/*");                startActivityForResult(intent, 100);            }        });            }        @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {                Log.i("lanyan", "onActivityResult()");        if (RESULT_OK != resultCode || null == data) {            return;        }        //contentProvider格式        Uri uri = data.getData();        Log.i("lanyan", "uri: " + uri);        String oldPath = getRealPath(uri);        Log.i("lanyan", "realPath: " + oldPath);                        if (null != oldPath) {            String newPath = CompressUtil.compressPic(oldPath, SAVE_PATH                    + getFileName(oldPath));            imageView.setImageURI(Uri.parse(newPath));        }        super.onActivityResult(requestCode, resultCode, data);    }        private String getFileName(String path) {        String name = null;                if (null != path) {            name = Uri.parse(path).getLastPathSegment();        }        return name;    }        /**     * 根据Uri获取文件真实路径     * @param uri     * @return     */    private String getRealPath(Uri uri) {                //此次判断仅为避免异常        //是因为若选择的文件非图片时,则返回的URI格式为file:///....(suffix为文件真实路径)        //有的机器上安装类似文件管理等APK时,只要通过文件管理方式选择,无论所选类型是否为图片,返回Uri都如上述形式        //小米1,即是如此。另外某些手机则是选择非图片类型时出现上述情况        String path = uri.toString();        if (path.startsWith("file://")) {            Toast.makeText(this, "地址解析异常", Toast.LENGTH_SHORT).show();            return null;        }                //Uri格式为ContentProvider格式,content:///....(suffix非文件真实路径)        Cursor cursor = managedQuery(uri, new String[]{MediaStore.Images.Media.DATA}, null, null, null);        cursor.moveToFirst();                return cursor.getString(0);    }    }

CompressUtil

public class CompressUtil {        /**     * 图片压缩后的最大长/宽     */    private static final int PRO_MAX_SIZE = 500;        public static String compressPic(String oldPath, String newPath) {                BitmapFactory.Options opts = new BitmapFactory.Options();        //设为true,不为图片非配内存(不加载到内存中),仅获取图片原始大小,所以返回值为NULL        opts.inJustDecodeBounds = true;        BitmapFactory.decodeFile(oldPath, opts);        int srcWidth = opts.outWidth;        int srcHeight = opts.outHeight;        //        Log.i("lanyan", "w:" + srcWidth + " ,h:" + srcHeight);                //缩放比例        double ratio;        int destWidth;        int destHeight;                if (srcWidth > srcHeight) {            destWidth = PRO_MAX_SIZE;            ratio = (double)srcWidth / PRO_MAX_SIZE;            destHeight = (int)(srcHeight / ratio);        } else {            destHeight = PRO_MAX_SIZE;            ratio = (double)srcHeight / PRO_MAX_SIZE;            destWidth = (int)(srcWidth / ratio);        }                Log.i("lanyan", "ratio:" + ratio );                opts.inJustDecodeBounds = false;        //缩放放图片大小以此缩放比例值为准,outWidth与outHeight未必准确        opts.inSampleSize = (int)ratio + 1;        opts.outWidth = destWidth;        opts.outHeight = destHeight;                Bitmap newPic = BitmapFactory.decodeFile(oldPath, opts);                FileOutputStream fos = null;                try {                        ensureDicExist(newPath);                        fos = new FileOutputStream(new File(newPath));                } catch (FileNotFoundException e) {            e.printStackTrace();            Log.i("lanyan", "获取输出流失败");        }                 newPic.compress(CompressFormat.JPEG, 100, fos);                return newPath;    }        private static void ensureDicExist(String path) {                int index = path.lastIndexOf("/");                String newPath = path.substring(0, index);                File file = new File(newPath);                if(!file.exists()) {            file.mkdirs();        }            }    }

注释有点乱,且没有解决选择非图片时的问题,仅仅提示了一个异常

效果图:

1,程序初始化:

2,选择一张图片(1.8M,压缩后大小为393KB)

转载于:https://www.cnblogs.com/youjun/archive/2012/12/13/2817257.html

你可能感兴趣的文章
Ext.Net学习笔记23:Ext.Net TabPanel用法详解
查看>>
hadoop集群监控工具ambari安装
查看>>
DNS劫持
查看>>
表单批量添加
查看>>
Python补充06 Python之道
查看>>
利用手上的UI资源(附免费UI工具包)
查看>>
Windows 7 无密码文件共享
查看>>
Sql server之sql注入篇
查看>>
CSS基本知识2-CSS选择
查看>>
Android中应用程序如何获得系统签名权限
查看>>
胖子哥的大数据之路(11)-我看Intel&&Cloudera的合作
查看>>
一个提供jsp免费空间的站点
查看>>
2014Esri全球用户大会之标准和互操作
查看>>
[歪谈]“走形式”的会议要不要滚粗
查看>>
wordpress表结构
查看>>
关于删除 hao123 主页设置的一点经验
查看>>
快速排序
查看>>
浅析Java虚拟机结构与机制[转]
查看>>
具体解释Android中AsyncTask的使用
查看>>
谷歌“信息安全公主”:我是一名好黑客
查看>>