Android调用手机拍照以及从相册选择照片,剪裁
来源:互联网 发布:nginx server name ip 编辑:程序博客网 时间:2024/04/29 22:45
/*用来标识请求照相功能的activity*/
private static final int CAMERA_WITH_DATA = 3023;
/*用来标识请求gallery的activity*/
private static final int PHOTO_PICKED_WITH_DATA = 3021;
/*拍照的照片存储位置*/
private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera");
private File mCurrentPhotoFile;//照相机拍照得到的图片
private void doPickPhotoAction() {
Context context = EditContact.this;
// Wrap our context to inflate list items using correct theme
final Context dialogContext = new ContextThemeWrapper(context,
android.R.style.Theme_Light);
String cancel="返回";
String[] choices;
choices = new String[2];
choices[0] = getString(R.string.take_photo); //拍照
choices[1] = getString(R.string.pick_photo); //从相册中选择
final ListAdapter adapter = new ArrayAdapter<String>(dialogContext,
android.R.layout.simple_list_item_1, choices);
final AlertDialog.Builder builder = new AlertDialog.Builder(
dialogContext);
builder.setTitle(R.string.attachToContact);
builder.setSingleChoiceItems(adapter, -1,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
switch (which) {
case 0:{
String status=Environment.getExternalStorageState();
if(status.equals(Environment.MEDIA_MOUNTED)){//判断是否有SD卡
doTakePhoto();// 用户点击了从照相机获取
}
else{
showToast("没有SD卡");
}
break;
}
case 1:
doPickPhotoFromGallery();// 从相册中去获取
break;
}
}
});
builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
}
/**
* 拍照获取图片
*
*/
protected void doTakePhoto() {
try {
// Launch camera to take photo for selected contact
PHOTO_DIR.mkdirs();// 创建照片的存储目录
mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());// 给新照的照片文件命名
final Intent intent = getTakePickIntent(mCurrentPhotoFile);
startActivityForResult(intent, CAMERA_WITH_DATA);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.photoPickerNotFoundText,
Toast.LENGTH_LONG).show();
}
}
public static Intent getTakePickIntent(File f) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
return intent;
}
/**
* 用当前时间给取得的图片命名
*
*/
private String getPhotoFileName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'_yyyy-MM-dd HH:mm:ss");
return dateFormat.format(date) + ".jpg";
}
// 请求Gallery程序
protected void doPickPhotoFromGallery() {
try {
// Launch picker to choose photo for selected contact
final Intent intent = getPhotoPickIntent();
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.photoPickerNotFoundText1,
Toast.LENGTH_LONG).show();
}
}
// 封装请求Gallery的intent
public static Intent getPhotoPickIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
// 因为调用了Camera和Gally所以要判断他们各自的返回情况,他们启动时是这样的startActivityForResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK)
return;
switch (requestCode) {
case PHOTO_PICKED_WITH_DATA: {// 调用Gallery返回的
final Bitmap photo = data.getParcelableExtra("data");
// 下面就是显示照片了
System.out.println(photo);
//缓存用户选择的图片
img = getBitmapByte(photo);
mEditor.setPhotoBitmap(photo);
System.out.println("set new photo");
break;
}
case CAMERA_WITH_DATA: {// 照相机程序返回的,再次调用图片剪辑程序去修剪图片
doCropPhoto(mCurrentPhotoFile);
break;
}
}
}
protected void doCropPhoto(File f) {
try {
// 启动gallery去剪辑这个照片
final Intent intent = getCropImageIntent(Uri.fromFile(f));
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
} catch (Exception e) {
Toast.makeText(this, R.string.photoPickerNotFoundText,
Toast.LENGTH_LONG).show();
}
}
/**
* Constructs an intent for image cropping. 调用图片剪辑程序
*/
public static Intent getCropImageIntent(Uri photoUri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(photoUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
转载于:http://wenku.baidu.com/view/6a5505a00029bd64783e2c8c.html==============================================
当调用android手机相机的剪切图片时
/**
* 调用android系统自带的图片裁剪,把用户选择的图片
* 裁剪成适合用户手机的大小
* @param imagePath
*/
public void startPhotoZoom(String imagePath) {
//获得裁剪图片的路径文件
File file = new File(imagePath);
//获得裁剪图片的名字
originName = file.getName();
//获得裁剪图片的uri
Uri uri=Uri.fromFile(file);
//调用intent跳转的裁间页面
Intent intent = new Intent("com.android.camera.action.CROP");
//传入裁剪图片的路径uri和需要裁剪的格式
intent.setDataAndType(uri, ChooseName.IMAGE_UNSPECIFIED);
//可裁剪状态
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX",dm.widthPixels * 2);
intent.putExtra("aspectY", dm.heightPixels);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", dm.widthPixels * 22/13);
intent.putExtra("outputY", dm.heightPixels * 12/13);
System.out.println(dm.widthPixels * 24/13);
System.out.println(dm.heightPixels * 12/13);
intent.putExtra("return-data", true);
startActivityForResult(intent, ChooseName.PHOTORESOULT);
}
当 intent.putExtra("outputX", dm.widthPixels*2 );
intent.putExtra("outputY", dm.heightPixels );
中dm.heightPixels , dm.widthPixels*2参数过大时就会卡刷,我裁剪的是手机屏幕大小,当每次我用屏幕分辨率高一点的手机时
就会卡死,我感觉好像是应为参数大,处理图片慢,造成的,这里好像应该用辅助线程,但又不知道怎么用,请知道的大牛帮帮小弟啊
转载于:http://www.apkbus.com/android-14534-1-1.html
- Android调用手机拍照以及从相册选择照片,剪裁
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片 不指定
- Android 调用摄像头拍照 以及 从相册中选择照片
- Android 从相册选择照片 手机拍照
- Android 调用手机相册、摄像头拍照及剪裁照片
- android 拍照和相册选择照片之后。剪裁图片。
- 调用摄像头拍照及从相册中选择照片
- 解开Android应用程序组件Activity的"singleTask"之谜
- StringBuffer的使用陷阱
- jdk1.4的下载地址
- eclipse 快捷键
- 保持好奇心!
- Android调用手机拍照以及从相册选择照片,剪裁
- 由浅入深理解索引的实现
- HTTPS协议与网络安全
- 黑马程序员_学习日记二_异常二
- 团队建设之能力账户
- Flex游戏编程性能优化
- WORD 分栏后 页码混乱
- 心情随笔
- tiny210 uboot