系统相机 系统相册 裁剪【示例】

系统相机 系统相册 裁剪

public class MainActivity extends ListActivity {   public static final String fileSavePath = Environment.getExternalStorageDirectory().getPath() + File.separator;   public static final String tempFileSavePath = fileSavePath + "temp.png";   public static final String tempCropFileSavePath = fileSavePath + "temp_crop.png";   public static final int REQUEST_CODE_0 = 1100;   public static final int REQUEST_CODE_1 = 1101;   public static final int REQUEST_CODE_11 = 1111;   public static final int REQUEST_CODE_12 = 1112;   public static final int REQUEST_CODE_4 = 1104;   public static final int REQUEST_CODE_5 = 1105;   private TextView tv;   private ImageView iv;   private boolean isCrop;   private boolean isSaveToUri;

protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      String[] array = {"使用相机拍照并获取返回的照片\n注意返回的并非原图,照片会自动被压缩", //            "使用相机拍照并将照片保存在指定的位置\n注意这时在指定位置保存的是原图",//            "调用系统图库APP的裁剪图片功能,将图片裁剪为指定大小\n将裁剪后的图片通过onActivityResult返回",//            "调用系统图库APP的裁剪图片功能,将图片裁剪为指定大小\n将裁剪后的照片保存在指定的位置",//            "从系统图库APP中获取图片,这里获取的是原图",//            "从系统图库APP中获取图片,并将照片裁剪为指定大小\n将裁剪后的图片通过onActivityResult返回",//            "从系统图库APP中获取图片,并将照片裁剪为指定大小\n将裁剪后的照片保存在指定的位置",};      for (int i = 0; i < array.length; i++) {         array[i] = i + "、" + array[i];      }      iv = new ImageView(this);      //iv.setScaleType(ImageView.ScaleType.CENTER_CROP);      getListView().addFooterView(iv);      tv = new TextView(this);      tv.setTextColor(Color.BLUE);      getListView().addFooterView(tv);      setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array))));   }

@Override   protected void onListItemClick(ListView l, View v, int position, long id) {      switch (position) {         case 0:         case 1:         case 2:         case 3:            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//调用系统相机拍照            if (position == 0) startActivityForResult(intent, REQUEST_CODE_0);            else {//将返回的数据保存到指定位置               isCrop = (position >= 2);//裁剪               isSaveToUri = (position == 3);               intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(tempFileSavePath)));               startActivityForResult(intent, REQUEST_CODE_1);            }            break;         case 4:         case 5:         case 6:            isCrop = (position >= 5);//裁剪            Intent intent2 = new Intent(Intent.ACTION_PICK);            intent2.setType("image/*");            if (position == 4) startActivityForResult(intent2, REQUEST_CODE_4);            else {               isSaveToUri = (position == 6);               startActivityForResult(intent2, REQUEST_CODE_5);            }            break;      }   }

@Override   protected void onActivityResult(int requestCode, int resultCode, Intent data) {      super.onActivityResult(requestCode, resultCode, data);      if (resultCode == RESULT_CANCELED) {//0         Toast.makeText(this, "结果码:" + requestCode + "   RESULT_CANCELED", Toast.LENGTH_SHORT).show();         return;      } else if (resultCode == RESULT_OK) {//-1         Toast.makeText(this, "结果码:" + requestCode + "   RESULT_OK", Toast.LENGTH_SHORT).show();      }      //      //*******************************************************************************************************************      //      switch (requestCode) {         case REQUEST_CODE_0:// 注意,返回的并非原图,照片会自动被压缩!            Bitmap bitmap = (Bitmap) data.getExtras().get("data");            if (bitmap != null) {               tv.append("返回的Bitmap的尺寸为" + bitmap.getWidth() + " * " + bitmap.getHeight() + "\n");               iv.setImageBitmap(bitmap);            }            break;         case REQUEST_CODE_1://注意,这里返回的data为null,这时在指定位置保存的是原图            tv.append("已将Bitmap保存到指定位置,此时 data == null : " + (data == null) + "\n");            Bitmap bitmap1 = BitmapFactory.decodeFile(tempFileSavePath);            if (bitmap1 != null) {               iv.setImageBitmap(bitmap1);               tv.append("裁剪前的Bitmap的尺寸为" + bitmap1.getWidth() + " * " + bitmap1.getHeight() + "\n");               if (isCrop) {                  Uri fromUri = Uri.fromFile(new File(tempFileSavePath));                  if (!isSaveToUri) cropImage(this, REQUEST_CODE_11, fromUri);                  else {                     Uri toUri = Uri.fromFile(new File(tempCropFileSavePath));                     cropImage(this, REQUEST_CODE_12, fromUri, toUri);                  }               }            }            break;         //         //*******************************************************************************************************************         //         case REQUEST_CODE_4:         case REQUEST_CODE_5:            try {               Uri fromUri = data.getData();               Bitmap bitmap4 = MediaStore.Images.Media.getBitmap(getContentResolver(), fromUri);               if (bitmap4 != null) {                  tv.append("返回的Bitmap的尺寸为" + bitmap4.getWidth() + " * " + bitmap4.getHeight() + "\n");                  if (!isCrop) iv.setImageBitmap(bitmap4);                  else {                     if (!isSaveToUri) cropImage(this, REQUEST_CODE_11, fromUri);                     else {                        Uri toUri = Uri.fromFile(new File(tempCropFileSavePath));                        cropImage(this, REQUEST_CODE_12, fromUri, toUri);                     }                  }               }            } catch (IOException e) {               e.printStackTrace();            }            break;         //         //*******************************************************************************************************************         //         case REQUEST_CODE_11: // 将裁剪后的图片通过onActivityResult中的Intent返回            Bitmap bitmap5 = (Bitmap) data.getParcelableExtra("data");            if (bitmap5 != null) {               tv.append("裁剪后的Bitmap的尺寸为" + bitmap5.getWidth() + " * " + bitmap5.getHeight() + "\n");               iv.setImageBitmap(bitmap5);            }            break;         case REQUEST_CODE_12: //将裁剪后的图片通过指定的Uri返回            try {               Uri tempCropFileUri = Uri.fromFile(new File(tempCropFileSavePath));               Bitmap bitmap6 = MediaStore.Images.Media.getBitmap(getContentResolver(), tempCropFileUri);               tv.append("指定Uri后裁剪后的尺寸为" + bitmap6.getWidth() + " * " + bitmap6.getHeight() + "\n");               iv.setImageBitmap(bitmap6);            } catch (IOException e) {               e.printStackTrace();            }            break;      }   }

/**    * 调用系统图库APP的裁剪图片功能,将指定Uri中的图片裁剪为指定大小    */   public static void cropImage(Activity activity, int requestCode, Uri fromUri) {      cropImage(activity, requestCode, fromUri, 144, 144, null);   }

/**    * 将裁剪后的照片保存在指定的位置    */   public static void cropImage(Activity activity, int requestCode, Uri fromUri, Uri toUri) {      cropImage(activity, requestCode, fromUri, 144, 144, toUri);   }

/**    * 调用系统图库APP的裁剪图片功能,将指定图片裁剪为指定大小    */   public static void cropImage(Activity activity, int requestCode, Uri fromUri, int desWidth, int desHeight, Uri toUri) {      if (fromUri == null) return;      //指定action是使用系统图库裁剪图片      Intent intent = new Intent("com.android.camera.action.CROP");      intent.setDataAndType(fromUri, "image/*");      //设置在开启的Intent中,显示的VIEW可裁剪      intent.putExtra("crop", "true");      //设置裁剪比例及裁剪图片的具体宽高      intent.putExtra("aspectX", 1);      intent.putExtra("aspectY", 1);      intent.putExtra("outputX", desWidth);      intent.putExtra("outputY", desHeight);      //设置是否允许拉伸      intent.putExtra("scale", true);      intent.putExtra("scaleUpIfNeeded", true);      //设置输出格式      intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());      //设置是否需要人脸识别,默认不需要设置      intent.putExtra("noFaceDetection", true);      //设置是否返回数据      if (toUri == null) {         //如果设置为true,那么便不会在给定的uri中获取到裁剪的图片,这里是将数据返回到了onActivityResult中的intent中了         intent.putExtra("return-data", true);      } else {         //如果要在给定的uri中返回图片,则必须设置为false。注意:要防止裁减前图片的uri与保存时图片的uri相同         intent.putExtra("return-data", false);         intent.putExtra(MediaStore.EXTRA_OUTPUT, toUri);      }      activity.startActivityForResult(intent, requestCode);   }}

2017-4-14

null

时间: 2024-10-01 21:29:53

系统相机 系统相册 裁剪【示例】的相关文章

Android 调用系统相机以及相册源码

Android 调用系统相机拍照.以及相册.完成之后图片是上传到app上.前面的功能已经测试过了.没有上传到服务器,因为我没服务器测试.但项目里面有个类可以参考上传图片到服务器,我就没测试了.接下来看代码,虽然注释写得少,但其作用看英文单词意思,又在或是查看调用. 项目源码下载地址:http://download.csdn.net/detail/qq_16064871/8585169 转载请注明出处: http://blog.csdn.net/qq_16064871 package com.ex

iOS开发 调用系统相机和相册

调用系统相机和相册 (iPad,iPhone)打开相机:(iPad,iPhone)//先设定sourceType为相机,然后判断相机是否可用(ipod)没相机,不可用将sourceType设定为相片库      UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;  //    if (![UIImagePickerController isSourceTypeAvailab

Android简单的调用系统相机和相册

  public void reasonAdd(View v)     {        final String [] strs=new String[]{"拍照","相册"};         AlertDialog.Builder builder=new AlertDialog.Builder(this);         builder.setTitle("照片");         builder.setItems(strs, new 

Android调用系统相机和相册

准备工作 权限 <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission. WRITE_EXTERNAL_STORAGE" /> <!--请求访问使用照相设备--> <uses-permission android:name="android.permission.CAMERA" /> 常量 public final static

iOS 调用系统相机拍照相册功能

写一个按钮直接复制下面代码 视图必须继承 <UIImagePickerControllerDelegate,UIPopoverControllerDelegate,UIActionSheetDelegate>代理 //取拍照片 - (void)showActionSheet { UIActionSheet *sheet; if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCame

iOS 使用系统相机、相册显示中文

在调用系统相机时,"cancel" 改为"取消",调用系统相册时,"photos" 改为 "相机",方法如下: 1.在 info.plist 添加 Localized resources can be mixed  并设值为YES 表示是否允许应用程序获取框架库内语言. 2.在info.plist 中添加或修改 Localization native development region 选择 china 3.添加本地语言包

调用系统相机,相册功能

一开始的思路是这一块的功能单独出去;这样处理又会碰见很多问题. 还是集成在Activity中可能效果更好些, 而且三星的手机调用系统相机会导致调用的Activity会重启生命周期,如果是在fragment中调用的,会碰见更多的问题,做外包的伤不起,想深入下这个问题都没时间,暂时记录下在Activity中解决问题的方法,方便后面使用时直接拿来用. 比如在Activity中点击某个按钮,弹出一个对话框,选择拍照还是选择图片 mButton.setOnClickListener(new OnClick

Android 调用系统相机拍照保存以及调用系统相册的方法

系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(camera, CAMERA); 相机返回的数据通过下面的回调方法取得,并处理: public static final int CAMERA  = 0x01; @Over

android 调用系统相机获取图片、调用系统相册获取图片,并对图片进行截取

打开系统相册获取图片并截取,代码相对简单 1 Intent intent = new Intent(Intent.ACTION_GET_CONTENT,null); 2 intent.setType("image/*"); 3 intent.putExtra("crop", "true"); 4 5 //WIDTH 和 HEIGHT指的是截取框的宽高比例,如设WIDTH = 1,HEIGHT = 1,截取框就为正方形 6 intent.putEx