调用系统相册相机,然后裁剪

上一次写项目时,需要上传头像,要求是无论是从相册还会相机拍照都可以,然后需要裁减。我在这里是直接调用系统的裁减功能

(1)下面是我写的activity,注释很详细啦,这里就不一一介绍啦

public class MainActivity extends Activity {

		public static final int NONE = 0;
		public static final int PHOTOHRAPH = 1;// 拍照
		public static final int PHOTOZOOM = 2; // 缩放
		public static final int PHOTORESOULT = 3;// 结果

		public static final String IMAGE_UNSPECIFIED = "image/*";
		ImageView imgHead;
		Button btnAlbum;// 相册按钮
		Button btnCamera;// 拍照按钮
		private String ImageName;

		@Override
		public void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			setContentView(R.layout.activity_main);
			imgHead = (ImageView) findViewById(R.id.imageID);// 要显示的图片
			btnAlbum = (Button) findViewById(R.id.btn_album);// 相册按钮
			btnCamera = (Button) findViewById(R.id.btn_camera);// 拍照按钮

			btnAlbum.setOnClickListener(new View.OnClickListener() {
				public void onClick(View v) {
					// 调用系统的相册
					Intent intent = new Intent(Intent.ACTION_PICK, null);
					intent.setDataAndType(
							MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
							IMAGE_UNSPECIFIED);

					// 调用剪切功能
					startActivityForResult(intent, PHOTOZOOM);
				}
			});

			btnCamera.setOnClickListener(new View.OnClickListener() {

				public void onClick(View v) {
					ImageName = "/" + getStringToday() + ".jpg";

					// 调用系统的拍照功能
					Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
					intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
							.fromFile(new File(Environment
									.getExternalStorageDirectory(), ImageName)));
					startActivityForResult(intent, PHOTOHRAPH);
				}
			});

		}

		/**
		 * 格式化当前时间
		 * 
		 * @return
		 */
		public static String getStringToday() {
			Date currentTime = new Date();// 获得当前时间
			SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");// 格式化的方式
			String dateString = formatter.format(currentTime);// 格式化当前时间
			return dateString;
		}

		// 调用startActivityResult,返回之后的回调函数
		@Override
		protected void onActivityResult(int requestCode, int resultCode,
				Intent data) {
			if (resultCode == NONE)
				return;
			// 拍照
			if (requestCode == PHOTOHRAPH) {
				// 设置文件保存路径这里放在跟目录下
				File picture = new File(
						Environment.getExternalStorageDirectory() + ImageName);
				startPhotoZoom(Uri.fromFile(picture));
			}

			if (data == null)
				return;

			// 读取相册缩放图片
			if (requestCode == PHOTOZOOM) {
				startPhotoZoom(data.getData());
			}
			// 处理结果
			if (requestCode == PHOTORESOULT) {
				Bundle extras = data.getExtras();// 通过返回过来的data,获得Bundle对象
				if (extras != null) {
					Bitmap photo = extras.getParcelable("data");// 获得bitmap对象
					// Bitmap photo
					// =BitmapFactory.decodeResource(getResources(),
					// R.drawable.ic_launcher);//将图片转化成bitmap对象
					ByteArrayOutputStream stream = new ByteArrayOutputStream();
					photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0
																			// -
					// 100)压缩文件
					// 0表示压缩比最高,100表示压缩比最小
					InputStream isBm = new ByteArrayInputStream(
							stream.toByteArray());
					// NewService newService=new NewService(); //上传图片类的对象
					// newService.UploadHead("http://192.168.8.185/MobileService/UploadHead.ashx",
					// isBm);
					imgHead.setImageBitmap(photo);// 将拍照或者从相册截取获得的结果放在imageView控件里面
				}

			}

			super.onActivityResult(requestCode, resultCode, data);
		}

		/**
		 * 调用系统的裁剪图片的方法,设置缩放图片的一些参数
		 * 
		 * @param uri
		 */
		public void startPhotoZoom(Uri uri) {
			Intent intent = new Intent("com.android.camera.action.CROP");
			intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
			intent.putExtra("crop", "true");
			// aspectX aspectY 是宽高的比例
			intent.putExtra("aspectX", 1);
			intent.putExtra("aspectY", 1);
			// outputX outputY 是裁剪图片宽高
			intent.putExtra("outputX", 180);
			intent.putExtra("outputY", 180);
			intent.putExtra("return-data", true);
			startActivityForResult(intent, PHOTORESOULT);
		}

	}


(2)这是对应的xml,很简单,就有几个控件而已

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/app_name" />

        <ImageView
            android:id="@+id/imageID"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/btn_album"
            android:layout_width="150dip"
            android:layout_height="50dip"
            android:text="相册" />

        <Button
            android:id="@+id/btn_camera"
            android:layout_width="150dip"
            android:layout_height="50dip"
            android:text="拍照" />
    </LinearLayout>



  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值