Android中使用系统相机进行拍照并获取高清照片(一)

原创 2016年01月21日 09:23:26



打开系统像机功能


方式一:

         /**
	 * 打开系统像机的功能
	 * @param view
	 */
	public void startCamera(View view){
		Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		startActivity(intent);
	}
	


这里是通过 调用一个意图开打开的 

当我们自己的应用程序在清单文件中添加 


            <intent-filter>
                <action android:name="android.media.action.IMAGE_CAPTURE" />
                <category android:name="android.intent.category.DEFAULT" >
                </category>
            </intent-filter>


那么当别的应用程序调用这个意图来打开像机的时候,我们的这个应用也会出现在他调用像机的选择框中



获取系统橡机拍摄的照片



首先打开方式为 

        /**
	 * 打开系统像机的功能
	 * @param view
	 */
	public void startCamera(View view){
		Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		startActivityForResult(intent, 1234);
	}


复写activity的方法 onActivityResult ,获取拍摄照片

        @Override
	protected void onActivityResult(int requestCode, int resultCode, Intent arg2) {
		super.onActivityResult(requestCode, resultCode, arg2);
		if (resultCode== RESULT_OK) {
			if (resultCode == 1234) {
				Bundle bundle = arg2.getExtras();
				Bitmap bitmap =  (Bitmap) bundle.get("data");
			}
		}
	}


当然要注意到的是 这里获取到的只是照片的缩略图


打开系统相机,并获取高清照片


这里需要设置一个自定义的存储路径,然后从固定的路径中获取我们所拍摄的照片

拍摄前的设置

                //设置自定义存储路径
                mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/systemCemer";
                //存储文件夹操作
                File outFilePath = new File(mFilePath);
                if (!outFilePath.exists()) {
                    outFilePath.mkdirs();
                }
                //设置自定义照片的名字
                String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
                mFilePath = mFilePath + "/" + fileName + ".jpg";

                File outFile = new File(mFilePath);
                Uri uri = Uri.fromFile(outFile);
                //拍照
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                startActivityForResult(intent, 305);

获取照片的操作

在Activity中

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
if (resultCode==RESULT_OK){
            if (requestCode==305){
                if (data!=null){
                   
                }else {
                    
                    if (BuildConfig.DEBUG) Log.d("SystemCemerActivity", mFilePath);
                   
                    final Bitmap bitmap = loadingImageBitmap(mFilePath);
                    if (bitmap!=null){
                       mImageView.setImageBitmap(bitmap);
                    }
                }
            }
        }


这里面依据image 的path来获取了一个bitmap对象,然后将其设置给imageview来显示,使用到的loadingImageBitmap方法是用来加载高清大图的适当缩放功能的方法


 public Bitmap loadingImageBitmap(String imagePath) {
        /**
         * 获取屏幕的宽与高
         */
        final int width = getWindowManager().getDefaultDisplay().getWidth();
        final int height = getWindowManager().getDefaultDisplay().getHeight();
        /**
         * 通过设置optios来只加载大图的尺寸
         */
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        Bitmap bitmap = null;
        try {
            bitmap = BitmapFactory.decodeFile(imagePath, options);
            /**
             * 计算手机宽高与显示大图的宽高,然后确定缩放有比例
             */
            int widthRaio = (int) Math.ceil(options.outWidth/(float)width);
            int heightRaio = (int) Math.ceil(options.outHeight/(float)height);
            if (widthRaio>1&&heightRaio>1){
                if (widthRaio>heightRaio){
                    options.inSampleSize = widthRaio;
                }else {
                    options.inSampleSize = heightRaio;
                }
            }
            /**
             * 设置加载缩放后的图片
             */
            options.inJustDecodeBounds = false;
            bitmap = BitmapFactory.decodeFile(imagePath, options);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bitmap;
    }









版权声明:本文为博主原创文章,未经博主允许不得转载。

Android开发获取相机拍照的原图(并非缩略图)

Android开发拍照上传是个很常见的功能,通过如下代码可以激活相机进行拍照: Intent intent = new Intent("android.media.action.IMAG...
  • shihui512
  • shihui512
  • 2016年05月21日 14:40
  • 2049

android调用照相机拿到原图

转自:原地址 本文主要讲解的是保存拍照后的图片到系统默认文件夹下,并在日后使用系统自带 图库 应用时可以方便的看到。 本文主要内容: 1、调用系统相机拍照并存储; 2、处理大图片防止内存溢出(...
  • yp321
  • yp321
  • 2015年03月17日 18:03
  • 1073

Android调用系统相机拍照(返回为原图)

  • 2016年06月12日 16:29
  • 238KB
  • 下载

android打开系统相机分别获得原图和缩略图

第一种:获得缩略图: 打开相机 private void photo() { Intent openCameraIntent = new Intent(Medi...
  • huangxiaoguo1
  • huangxiaoguo1
  • 2016年12月08日 15:27
  • 3266

Android自定义相机拍的照片不清楚解决方案

最近做一个项目要用到自定义相机,预览的时候挺清晰的,但是拍好之后就变模糊了,弄了大半天才解决。 相机照片的尺寸只有几种固定的,2592×1936,2048×1536,1600×1200,1024×7...
  • zhangxp_xml
  • zhangxp_xml
  • 2016年11月18日 15:33
  • 1940

关于Android使用Camera自定义拍照出现模糊不清的解决方案

拍照前(预览): 拍照后(显示):   从上图可以看出拍照前跟拍照后清晰度完全不一致。当我把他保存为图片文件结果这个文件的大小只有10几KB,然后我使用其他机型的手机来测试结果出乎我的意料居然没问...
  • u012228009
  • u012228009
  • 2015年02月03日 15:37
  • 5995

Android自定义拍照解决部分手机拍完之后图片不清楚的问题

昨天同事跟我说了一个bug,让我整了一天,从昨天下午这个时间到今天下午这个时间,哎... 大家都懂的 首先我来说一个bug,我用surfaceView来实现自定义拍照的功能,先来张在genymotio...
  • zqq965774513
  • zqq965774513
  • 2015年07月21日 18:09
  • 6189

Android的两种拍照方法

Android有两种拍照方法,一种是直接调用系统的照相Intent,使用 onActivityResult获取图片资源或者指定图片路径,拍照返回成功后去指定路径读取图片;一种是用SurfaceView...
  • hopehe888999
  • hopehe888999
  • 2013年01月23日 18:03
  • 7632

Android开发技巧——Camera拍照功能

本篇是我对开发项目的拍照功能过程中,对Camera拍照使用的总结。由于camera2是在api level 21(5.0.1)才引入的,而Camera到6.0仍可使用,所以暂未考虑camera2。文档...
  • maosidiaoxian
  • maosidiaoxian
  • 2016年03月01日 17:58
  • 18443

调用系统相机拍照--是配到android-7.0

一:获取缩放图直接调用相机拍照,无需人和权限,但是缺点是只能获取到缩放图(不清晰的哦,一般不采用这种) /** * 缩放图 */ mT...
  • tongzhengtong
  • tongzhengtong
  • 2016年10月11日 18:10
  • 7703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中使用系统相机进行拍照并获取高清照片(一)
举报原因:
原因补充:

(最多只允许输入30个字)