Android大图片裁剪终极解决方案
生活随笔
收集整理的這篇文章主要介紹了
Android大图片裁剪终极解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
根據我們的分析與總結,圖片的來源有拍照和相冊,而可采取的操作有
- 使用Bitmap并返回數據
- 使用Uri不返回數據
????前面我們了解到,使用Bitmap有可能會導致圖片過大,而不能返回實際大小的圖片,我將采用大圖Uri,小圖Bitmap的數據存儲方式。
????我們將要使用到URI來保存拍照后的圖片:
?| 1 2 | private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file Uri imageUri = Uri.parse(IMAGE_FILE_LOCATION);//The Uri to store the big bitmap |
????不難知道,我們從相冊選取圖片的Action為Intent.ACTION_GET_CONTENT。
????根據我們上一篇博客的分析,我準備好了兩個實例的Intent。
????一、從相冊截大圖:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 | Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 2); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 600); intent.putExtra("outputY", 300); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // no face detection startActivityForResult(intent, CHOOSE_BIG_PICTURE); |
????二、從相冊截小圖
?| 1 2 3 4 5 6 7 8 9 10 11 12 | Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 2); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 200); intent.putExtra("outputY", 100); intent.putExtra("scale", true); intent.putExtra("return-data", true); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // no face detection startActivityForResult(intent, CHOOSE_SMALL_PICTURE); |
????三、對應的onActivityResult可以這樣處理返回的數據
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | switch (requestCode) { case CHOOSE_BIG_PICTURE: ????Log.d(TAG, "CHOOSE_BIG_PICTURE: data = " + data);//it seems to be null ????if(imageUri != null){ ????????Bitmap bitmap = decodeUriAsBitmap(imageUri);//decode bitmap ????????imageView.setImageBitmap(bitmap); ????} ????break; case CHOOSE_SMALL_PICTURE: ????if(data != null){ ????????Bitmap bitmap = data.getParcelableExtra("data"); ????????imageView.setImageBitmap(bitmap); ????}else{ ????????Log.e(TAG, "CHOOSE_SMALL_PICTURE: data = " + data); ????} ????break; default: ????break; } |
| 1 2 3 4 5 6 7 8 9 10 | private Bitmap decodeUriAsBitmap(Uri uri){ ????Bitmap bitmap = null; ????try { ????????bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); ????} catch (FileNotFoundException e) { ????????e.printStackTrace(); ????????return null; ????} ????return bitmap; } |
????效果圖:
| 大圖 | 小圖 |
轉載(http://my.oschina.net/ryanhoo/blog/86853)
轉載于:https://www.cnblogs.com/cimu/p/4319823.html
總結
以上是生活随笔為你收集整理的Android大图片裁剪终极解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言笔记初级篇】第六章:指针入门
- 下一篇: 第一章:Python的基本数据类型-第三