Android 拍照加裁剪处理方式
2012-10-17 12:42
441 查看
1.调用系统的照相机程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO_WITH_DATA);
2.在onActivityResult中处理返回的data
final Bitmap photo = data.getParcelableExtra("data");
如果不需要做剪切处理就可以直接使用图片了,比如显示到ImageView上
imageView.setImageBitmap(photo);
如果需要做剪切处理,就继续向下执行
3.做剪切处理
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
intent.putExtra("data", data);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 128);
intent.putExtra("outputY", 128);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
4.在onActivityResult中处理
与第二步相同。
完整代码:
public class SdCardUriTestActivity extends Activity {
/** Called when the activity is first created. */
private Button btnTake = null;
private ImageView lblImage = null;
private static final int PHOTO_PICKED_WITH_DATA = 3021;
private static final int CAMERA_WITH_DATA = 3023;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnTake = (Button)findViewById(R.id.btnTake);
lblImage = (ImageView)findViewById(R.id.lblImage);
btnTake.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_WITH_DATA);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(resultCode!=RESULT_OK)
return;
switch(requestCode){
case CAMERA_WITH_DATA:
final Bitmap photo = data.getParcelableExtra("data");
if(photo!=null){
doCropPhoto(photo);
}
case PHOTO_PICKED_WITH_DATA:
Bitmap photo1 = data.getParcelableExtra("data");
if(photo1!=null){
lblImage.setImageBitmap(photo1);
}
}
}
protected void doCropPhoto(Bitmap data){
Intent intent = getCropImageIntent(data);
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
}
public static Intent getCropImageIntent(Bitmap data) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
intent.putExtra("data", data);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 128);
intent.putExtra("outputY", 128);
intent.putExtra("return-data", true);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO_WITH_DATA);
2.在onActivityResult中处理返回的data
final Bitmap photo = data.getParcelableExtra("data");
如果不需要做剪切处理就可以直接使用图片了,比如显示到ImageView上
imageView.setImageBitmap(photo);
如果需要做剪切处理,就继续向下执行
3.做剪切处理
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
intent.putExtra("data", data);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 128);
intent.putExtra("outputY", 128);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
4.在onActivityResult中处理
与第二步相同。
完整代码:
public class SdCardUriTestActivity extends Activity {
/** Called when the activity is first created. */
private Button btnTake = null;
private ImageView lblImage = null;
private static final int PHOTO_PICKED_WITH_DATA = 3021;
private static final int CAMERA_WITH_DATA = 3023;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnTake = (Button)findViewById(R.id.btnTake);
lblImage = (ImageView)findViewById(R.id.lblImage);
btnTake.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_WITH_DATA);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(resultCode!=RESULT_OK)
return;
switch(requestCode){
case CAMERA_WITH_DATA:
final Bitmap photo = data.getParcelableExtra("data");
if(photo!=null){
doCropPhoto(photo);
}
case PHOTO_PICKED_WITH_DATA:
Bitmap photo1 = data.getParcelableExtra("data");
if(photo1!=null){
lblImage.setImageBitmap(photo1);
}
}
}
protected void doCropPhoto(Bitmap data){
Intent intent = getCropImageIntent(data);
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
}
public static Intent getCropImageIntent(Bitmap data) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
intent.putExtra("data", data);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 128);
intent.putExtra("outputY", 128);
intent.putExtra("return-data", true);
相关文章推荐
- Android 使用intent对Bitmap的处理(拍照、裁剪、从图库选择)
- Android实现拍照及图片裁剪(6.0以上权限处理及7.0以上文件管理)
- android调用系统相机和相册进行拍照裁剪处理,解决不同安卓版本存在无法加载相册的问题,处理了是否有sd卡的存在的情况
- android拍照或相册选照片,裁剪,圆图处理(4.4变动后)
- android 自定义比例裁剪图片(拍照 相册)方式 自定义比例
- Android拍照及图片裁剪、调用系统相册(兼容6.0以上权限处理及7.0以上文件管理)
- Android 拍照加剪切处理方式
- android 图片拍照图片旋转的处理方式
- Android:Camera的使用,并处理手机拍照后上传图片被旋转的问题
- Android快速SDK(13)拍照裁剪库PhotoGraph【傻瓜模式】
- Android 拍照、选择图片并裁剪
- Android RadioGroup中的RadioButton无法选中问题的一种处理方式
- android httpClient 支持HTTPS的2种处理方式
- Android调用相机实现拍照并裁剪图片,调用手机中的相冊图片并裁剪图片
- android httpClient 支持HTTPS的2种处理方式
- Android 4.4从图库选择图片并裁剪,由于系统版本不同导致Uri的bug的简单解决方式
- Android调用相册或相机拍照选取照片并裁剪
- Android 7.0 调用系统相机拍照、裁剪相片
- Android如何拍照或选择图片并裁剪