调用 android 自身裁剪功能
利用下面代码,我实现了对图片的剪切功能,可是我想让这剪切出来的新图片在Imageview上显示出来,怎么办啊?知道的人麻烦告诉小弟下,小弟最近才接触android的。fi...
利用下面代码,我实现了对图片的剪切功能,可是我想让这剪切出来的新图片在Imageview上显示出来,怎么办啊?知道的人麻烦告诉小弟下,小弟最近才接触android的。
final Intent intent = new Intent
("com.android.camera.action.CROP");
intent.setClassName("com.android.camera",
"com.android.camera.CropImage");
intent.setData( photoUri);
startActivityForResult(intent, REQUEST_CROP_IMAGE);
我是单击imageview让它跳转到图库在进行剪切的。我想剪切完后Imageview可以自动显示新的图片。 展开
final Intent intent = new Intent
("com.android.camera.action.CROP");
intent.setClassName("com.android.camera",
"com.android.camera.CropImage");
intent.setData( photoUri);
startActivityForResult(intent, REQUEST_CROP_IMAGE);
我是单击imageview让它跳转到图库在进行剪切的。我想剪切完后Imageview可以自动显示新的图片。 展开
推荐于2016-07-15 · 知道合伙人软件行家
关注
展开全部
在Android操作系统下可通过编程实现对视频图像进行抓拍并对图片的裁剪与上传功能。简单的实现方法采用Android 自带有关于照片的自由裁剪,非常适用及视频抓拍的接口功能。
一、视频抓拍
1、基本类
Android 框架通过 Camera API 或者 camer Intent 的方式,支持 捕捉图像和视频 。相关的大类主要有以下几个:
(1) Camera 摄像时候必须调用到的类;
(2)SurfaceView 提供摄像头预览。
(3)MediaRecorder 录像时候用到的类;
(4)Intent 如果不通过 Camera 对象来操控摄像头,那么用两个intent 动作 MediaStore.ACTION_IMAGE_CAPTURE or MediaStore.ACTION_VIDEO_CAPTURE 也能够实现摄影和录像。
o MediaStore.ACTION_IMAGE_CAPTURE —— 向内置摄像头程序请求图像的意图活动类型。
o MediaStore.ACTION_VIDEO_CAPTURE —— 向内置摄像头程序请求视频的意图活动类型。
2、 Manifest 声明
在使用Camera API前,必须做出使用 Camera 硬件的声明。主要有下面 点:
(1) Camera 允许:(注意,如果是通过intent 意图来操控的,则不需要下面声明)
<uses-permission android:name="android.permission.CAMERA" />
(2)Camera 特征,比如说名字
<uses-feature android:name="android.hardware.camera" />
(3)如果你要在SD卡中保存照片和视频,那么就得开启SD卡权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(4)录音权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
(5)如果希望在照片中插入GPS当地信息,还得开启GPS
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
3、使用方法
使用摄像头的方法有两种:
一种是编写代码比较少的,快速使用摄像头的意图Intent 方法;
另外一种就是 自动外观的摄像头用户界面,要求编写更多的代码。
4、使用Intent 快速应用摄像头:使用默认配置拍摄并保存
二、图片自由裁剪
关键代码如下:
public void imageCut(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//开启裁剪功能
intent.putExtra("crop", "true");
//设定宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设定裁剪图片宽高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//要求返回数据
intent.putExtra("return-data", true);
startActivityForResult(intent, 100);
}
返回数据后直接在onActivityResult 里对返回的图片数据进行显示就行了,这里由于剪切后的图片较小,个人觉得应该不用考虑OOM的问题,问题是,在调用自带的裁剪功能的时候,由于没看源码,所以不知道在调整裁剪框的时候,显示的那副图片有没有进行压缩,如果没有进行压缩,那么当图片很大的时候,加载起来就很容易出现OOM了,明显对此由于是调用官方的API,我没有方法去解决它。唯一的办法就是不用它,而是自己去写一个,就可以避免这个问题。利用如下的代码进行压缩,很好地避免OOM问题。
一、视频抓拍
1、基本类
Android 框架通过 Camera API 或者 camer Intent 的方式,支持 捕捉图像和视频 。相关的大类主要有以下几个:
(1) Camera 摄像时候必须调用到的类;
(2)SurfaceView 提供摄像头预览。
(3)MediaRecorder 录像时候用到的类;
(4)Intent 如果不通过 Camera 对象来操控摄像头,那么用两个intent 动作 MediaStore.ACTION_IMAGE_CAPTURE or MediaStore.ACTION_VIDEO_CAPTURE 也能够实现摄影和录像。
o MediaStore.ACTION_IMAGE_CAPTURE —— 向内置摄像头程序请求图像的意图活动类型。
o MediaStore.ACTION_VIDEO_CAPTURE —— 向内置摄像头程序请求视频的意图活动类型。
2、 Manifest 声明
在使用Camera API前,必须做出使用 Camera 硬件的声明。主要有下面 点:
(1) Camera 允许:(注意,如果是通过intent 意图来操控的,则不需要下面声明)
<uses-permission android:name="android.permission.CAMERA" />
(2)Camera 特征,比如说名字
<uses-feature android:name="android.hardware.camera" />
(3)如果你要在SD卡中保存照片和视频,那么就得开启SD卡权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(4)录音权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
(5)如果希望在照片中插入GPS当地信息,还得开启GPS
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
3、使用方法
使用摄像头的方法有两种:
一种是编写代码比较少的,快速使用摄像头的意图Intent 方法;
另外一种就是 自动外观的摄像头用户界面,要求编写更多的代码。
4、使用Intent 快速应用摄像头:使用默认配置拍摄并保存
二、图片自由裁剪
关键代码如下:
public void imageCut(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//开启裁剪功能
intent.putExtra("crop", "true");
//设定宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设定裁剪图片宽高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//要求返回数据
intent.putExtra("return-data", true);
startActivityForResult(intent, 100);
}
返回数据后直接在onActivityResult 里对返回的图片数据进行显示就行了,这里由于剪切后的图片较小,个人觉得应该不用考虑OOM的问题,问题是,在调用自带的裁剪功能的时候,由于没看源码,所以不知道在调整裁剪框的时候,显示的那副图片有没有进行压缩,如果没有进行压缩,那么当图片很大的时候,加载起来就很容易出现OOM了,明显对此由于是调用官方的API,我没有方法去解决它。唯一的办法就是不用它,而是自己去写一个,就可以避免这个问题。利用如下的代码进行压缩,很好地避免OOM问题。
展开全部
你要重写这个onActivityResult()方法 , 因为你这是调用系统的activity,所以要在这个事件中进行取得返回数据,具体代码
if(requestCode == REQUEST_CROP_IMAGE) {
Bundle extras = data.getExtras();
if(extras != null) {
Bitmap b = (Bitmap) extras.get("data");
setImageView.setImageBitmap(b);
}
返回的数据使用bundle绑定的,将数据获取后,转换成一个位图,放进imageView就可以了
if(requestCode == REQUEST_CROP_IMAGE) {
Bundle extras = data.getExtras();
if(extras != null) {
Bitmap b = (Bitmap) extras.get("data");
setImageView.setImageBitmap(b);
}
返回的数据使用bundle绑定的,将数据获取后,转换成一个位图,放进imageView就可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
startActivityForResult好像是不能跳回去的,用startActivity好像可以跳回去,尝试看看,我有几个月没用Android了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询