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,使用 onActivityResult获取图片资源或者指定图片路径,拍照返回成功后去指定路径读取图片;一种是用SurfaceView...

Android拍照和获取相册图片

之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过。 再也不要问度娘了,再也不用一堆博客里找啊找了。。。 ----------------------------...

android调用照相机拍照获取照片并…

1.调用系统的照相机程序 Intent intent = newIntent(MediaStore.ACTION_IMAGE_CAPTURE);  startActivityForResult(int...

Android中拍照和选择图片的处理

今天总结一下,在我们APP中拍照和选择图片的相关处理。 拍照ACTION: MediaStore.ACTION_IMAGE_CAPTURE 启用相册ACTION: Intent.ACTION_GET_...

Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片

Android Camera开发系列(一)——Camera的基本调用与API实现拍照功能 最近也是在搞个破相机,兼容性那叫一个不忍直视啊,于是自己翻阅了一些基本的资料,自己实现了一个相机,虽然相机...

Android相机拍照保存高清原图

代码不是很复杂我就直接上代码了 /** 拍照获取图片 */ public void photo() { try { Intent openCameraIntent = new Int...

Android拍照或从系统相册获取图片

android拍照,android从系统相册选择照片,android获取图片,android调用相机

Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传

仿照微信,朋友圈分享图片功能 。可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 。很不错的源码,大家有需要可以下载看看 。 ...

Android Camera开发分辨率相关问题总结

相机相关的开发时,发现并解决了一些问题,并将其记录于下以便以后查看。问题 设置了previewSize和pictureSize,但是通过打Log看出当时设置的时候分辨率是改变了的,然而正是拍照的时候分...
  • jiayite
  • jiayite
  • 2016年07月26日 21:44
  • 8889

Android Camera 找出屏幕的最佳尺寸大小

大家平时都会调用到Camera 这个API,在设置Camera.Paramera的参数的时候,有一个预览大小。也就是: setPreviewSize(int width, ing height) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中使用系统相机进行拍照并获取高清照片(一)
举报原因:
原因补充:

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