Android在程序中启动拍照/摄像或选择一张图片/视频,并制作缩略图后保存

有时候我们需要选择一个图片来做头像或是上传到相册中,这时候我们可以选择启动相机拍照,或者从图库中选择。

首先看看如何启动相机拍照并取得所拍的照片。

下面是启动相机拍照并返回所拍的照片的代码:

public void capturePicture(){
    //启动拍照,并保存到临时文件
    Intent intent = new Intent();
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    startActivityForResult(intent, REQUEST_CAPTURE_IMAGE);
}

下面是启动相机摄像并返回所拍的录像的代码:
public void captureVideo(){
    Intent intent2 = new Intent();
    intent2.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
    intent2.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); //设置为低质量
    startActivityForResult(intent2, REQUEST_CAPTURE_VIDEO);
}


下面是打开图库(既系统默认的图片选择器),选择一个图片或视频的代码:

public void choosePicture(){
    Intent intent3 = new Intent();
    intent3.setType("image/*");
    intent3.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent3, REQUEST_CHOOSE);
}


这样子整个过程就完成了,拍完照后我们按“确定”健,或者点击选择了照片后,返回到了我们程序的界面,那如何取得刚才的照片呢?请注意上面的代码中使用了startActivityForResult方法,所以很明显我们需要重载onActivityResult方法来拿到返回的数据。代码如下:

        @Override
	       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		       super.onActivityResult(requestCode, resultCode, data);

		       switch(resultCode){
		            case RESULT_OK:	
                        Uri uri = data.getData(); // 得到Uri
			                     String fPath = uri2filePath(uri); // 转化为路径
                            /* 做你想做的处理 **/
                            break;
                }
         }

整个过程到此完成。

下面附上制作缩略图和把Uri转化为文件路径的方法!
制作图片或视频的缩略图:

        /** 创建缩略图,返回缩略图文件路径 */
	public String createThumbnail(Bitmap source, String fileName){
		int oldW = source.getWidth();
		int oldH = source.getHeight();
		
		int w = Math.round((float)oldW/MAX_SIZES);  //MAX_SIZE为缩略图最大尺寸
		int h = Math.round((float)oldH/MAX_SIZES);
		
		int newW = 0;
		int newH = 0;
		
		if(w <= 1 && h <= 1){
			return saveBitmap(source, fileName);
		}
		
		int i = w > h ? w : h;  //获取缩放比例
		
		newW = oldW/i;
		newH = oldH/i;
		
		Bitmap imgThumb = ThumbnailUtils.extractThumbnail(source, newW, newH);  //关键代码!!
		
		return saveBitmap(imgThumb, fileName);  //注:saveBitmap方法为保存图片并返回路径的private方法
	}
	
	/** 创建视频缩略图,返回缩略图文件路径 */
	public String createVideoThumbnail(String filePath, String fileName){
		Bitmap videoThumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);  //关键代码!!
		return saveBitmap(videoThumb, fileName);  //注:saveBitmap方法为保存图片并返回路径的private方法

	}

把Uri转化为文件路径:

        /** 把Uri转化成文件路径 */
	private String uri2filePath(Uri uri){
		String[] proj = { MediaStore.Images.Media.DATA };
		Cursor cursor = managedQuery(uri,proj,null,null,null);
		int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
		cursor.moveToFirst();
		String path = cursor.getString(index);
		return path;
	}


OK!打完收工!


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
对于无人机摄像机进行软件防抖的方法,常见的有以下几种: 1. 基于卡尔曼滤波的方法:卡尔曼滤波是一种递归滤波算法,能够通过估计当前状态的均值和方差来消除噪声和抖动。在无人机摄像机开发,可以使用卡尔曼滤波来估计当前摄像机位置和姿态,并根据这些估计值对摄像机进行软件防抖。 2. 基于光流法的方法:光流法是一种基于图像序列的方法,通过检测相邻图像物体的移动来计算物体的速度和方向,进而实现对摄像机的软件防抖。在C/C++程序开发,可以使用OpenCV库的光流法函数来实现。 3. 基于惯性测量单元(IMU)的方法:IMU是一种能够测量加速度和角速度的传感器,可以用来估计摄像机的运动状态,并根据估计值对摄像机进行软件防抖。在C/C++程序开发,可以使用Arduino或其他嵌入式开发板来连接IMU传感器,并使用传感器数据来实现软件防抖。 以下是使用OpenCV库的光流法函数实现摄像机软件防抖的示例代码: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture cap(0); // 打开摄像头 if (!cap.isOpened()) { return -1; } Mat prev_frame, next_frame; cap >> prev_frame; cvtColor(prev_frame, prev_frame, COLOR_BGR2GRAY); while (true) { cap >> next_frame; cvtColor(next_frame, next_frame, COLOR_BGR2GRAY); Mat flow; calcOpticalFlowFarneback(prev_frame, next_frame, flow, 0.5, 3, 15, 3, 5, 1.2, 0); Mat warped_next_frame; warpPerspective(next_frame, warped_next_frame, flow, next_frame.size()); imshow("Original", next_frame); imshow("Stabilized", warped_next_frame); prev_frame = next_frame; if (waitKey(1) == 27) // 按下ESC键退出 { break; } } return 0; } ``` 在上述示例代码,我们使用了OpenCV库的calcOpticalFlowFarneback函数来计算相邻帧之间的光流,并使用warpPerspective函数将下一帧图像根据计算出的光流进行变换。最后,我们将原始图像和稳定后的图像分别显示在屏幕上,实现了对摄像机的软件防抖。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值