您的位置:首页 > 移动开发 > Android开发

Android大图片裁剪终极解决方案(中:从相册截图)

2016-08-24 21:00 465 查看
http://blog.csdn.net/floodingfire/article/details/8144615

在这篇博客中,我将向大家展示如何从相册截图。

上一篇博客中,我就拍照截图这一需求进行了详细的分析,试图让大家了解Android本身的限制,以及我们应当采取的实现方案。

根据我们的分析与总结,图片的来源有拍照和相册,而可采取的操作有

使用Bitmap并返回数据
使用Uri不返回数据

前面我们了解到,使用Bitmap有可能会导致图片过大,而不能返回实际大小的图片,我将采用大图Uri,小图Bitmap的数据存储方式。

我们将要使用到URI来保存拍照后的图片:

1
private
static
final
String
IMAGE_FILE_LOCATION =
"file:///sdcard/temp.jpg"
;//temp
file
2
Uri
imageUri = Uri.parse(IMAGE_FILE_LOCATION);
//The
Uri to store the big bitmap
不难知道,我们从相册选取图片的Action为Intent.ACTION_GET_CONTENT。

根据我们上一篇博客的分析,我准备好了两个实例的Intent。

一、从相册截大图:

01
Intent
intent =
new
Intent(Intent.ACTION_GET_CONTENT,
null
);
02
intent.setType(
"image/*"
);
03
intent.putExtra(
"crop"
,
"true"
);
04
intent.putExtra(
"aspectX"
,
2
);
05
intent.putExtra(
"aspectY"
,
1
);
06
intent.putExtra(
"outputX"
,
600
);
07
intent.putExtra(
"outputY"
,
300
);
08
intent.putExtra(
"scale"
,
true
);
09
intent.putExtra(
"return-data"
,
false
);
10
intent.putExtra(MediaStore.EXTRA_OUTPUT,
imageUri);
11
intent.putExtra(
"outputFormat"
,
Bitmap.CompressFormat.JPEG.toString());
12
intent.putExtra(
"noFaceDetection"
,
true
);
//
no face detection
13
startActivityForResult(intent,
CHOOSE_BIG_PICTURE);
二、从相册截小图

01
Intent
intent =
new
Intent(Intent.ACTION_GET_CONTENT,
null
);
02
intent.setType(
"image/*"
);
03
intent.putExtra(
"crop"
,
"true"
);
04
intent.putExtra(
"aspectX"
,
2
);
05
intent.putExtra(
"aspectY"
,
1
);
06
intent.putExtra(
"outputX"
,
200
);
07
intent.putExtra(
"outputY"
,
100
);
08
intent.putExtra(
"scale"
,
true
);
09
intent.putExtra(
"return-data"
,
true
);
10
intent.putExtra(
"outputFormat"
,
Bitmap.CompressFormat.JPEG.toString());
11
intent.putExtra(
"noFaceDetection"
,
true
);
//
no face detection
12
startActivityForResult(intent,
CHOOSE_SMALL_PICTURE);
三、对应的onActivityResult可以这样处理返回的数据

01
switch
(requestCode)
{
02
case
CHOOSE_BIG_PICTURE:
03
Log.d(TAG,
"CHOOSE_BIG_PICTURE:
data = "
+
data);
//it
seems to be null
04
if
(imageUri
!=
null
){
05
Bitmap
bitmap = decodeUriAsBitmap(imageUri);
//decode
bitmap
06
imageView.setImageBitmap(bitmap);
07
}
08
break
;
09
case
CHOOSE_SMALL_PICTURE:
10
if
(data
!=
null
){
11
Bitmap
bitmap = data.getParcelableExtra(
"data"
);
12
imageView.setImageBitmap(bitmap);
13
}
else
{
14
Log.e(TAG,
"CHOOSE_SMALL_PICTURE:
data = "
+
data);
15
}
16
break
;
17
default
:
18
break
;
19
}
01
private
Bitmap
decodeUriAsBitmap(Uri uri){
02
Bitmap
bitmap =
null
;
03
try
{
04
bitmap
= BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
05
}
catch
(FileNotFoundException
e) {
06
e.printStackTrace();
07
return
null
;
08
}
09
return
bitmap;
10
}
效果图:
大图小图








内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: