Android开发教程--关于系统相机拍照获取的照片尺寸较小问题的解决

网上大部分的解决方案,都是如下方式:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

startActivityForResult(intent,REQUEST_CODE_CAPTURE_CAMEIA);

拍照完成之后,回调:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode != RESULT_OK) { //此处的 RESULT_OK 是系统自定义得一个常量

return;

}

if (data!=null) {

if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA) {

Uri uri = data.getData();

if (uri == null) {

//use bundle to get data

Bundle dataBundle = data.getExtras();

if (dataBundle != null) {

Bitmap photo = (Bitmap) dataBundle.get("data");

if (photo!=null) {

//在一些手机上获取到的照片,发现尺寸很小

}

}

} else {

//通过uri来显示图片

imageView.setImage(uri);

}

}

}

}

通过实验之后发现,在一些手机上是通过uri来获取到图片的,都是可以获取到实际拍摄大小的照片。

还有一些手机是通过data.getExtras().get("data")来获取拍摄的照片,但是发现实际得到的照片尺寸却很小。

通过研究找到了解决的方案如下:

改写调用方法:

String filename = Tools.getCurDateStr()+".jpg";

cameraFile = new File(Environment.getExternalStorageDirectory()+"/"+Const.FOLDER_VOC_TEMP+"/"+filename);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));

startActivityForResult(intent, REQUEST_CODE_CAPTURE_CAMEIA);

回调的时候:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (cameraFile.exists()) {

Bitmap bitmap = null;

try {

FileInputStream fis = new FileInputStream(cameraFile);

bitmap = BitmapFactory.decodeStream(fis);

fis.close();

} catch (Exception e) {

e.printStackTrace();

}

if (bitmap!=null) {

Log.e(getClass().getName(), (bitmap.getWidth()+","+bitmap.getHeight()));

}

}

}

这样就解决了此问题。

时间: 2024-10-06 14:16:28

Android开发教程--关于系统相机拍照获取的照片尺寸较小问题的解决的相关文章

Android下载图片/调用系统相机拍照、显示并保存到本地

package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.

android 调用系统相机拍照 获取原图

好吧,为了这个问题又折腾了一整天.之前在网上找来的方法,如果在onActivityResult中直接用data.getData()的方式来生成bitmap,其实获取的是拍照生成的缩略图!看看尺寸就知道了.如果要获取原图,还需要一番折腾(特别是对于手里这个Samsung i9000)——之前朋友在不同的机型上使用的方法在我这里一直报错,且属于那种uncaught的错误-.- 话说回来,具体的折腾方法如下(如果不幸你看到了,希望不要“折疼了”): 在拍照的出发按钮的点击事件中写入如下代码: toCa

安卓开发之-调用系统相机拍照应注意要点。

(一)调用相机拍照保存至指定文件夹,intent.putExtra(file)可将拍到的照片直接保存到文件夹 但此方法不可用于拍摄视频,同样的在摄像时,如果传入路径的话,会出现画面卡死不动,而同时在传入的路径下面会有一个为空的文件,文件名是对的,但没有数据,而在回调函数onActivityResult中的data不为空,会为你传入的路径名.所以在使用Intent调用相机拍照或摄像时最好不要传入存储路径,否则在不同的机子上会出现不同的问题,按照默认的给定路径寻找文件即可. (二)如下:拍照 Int

调用系统相机拍照,保存照片,调用系统裁剪API对照片处理,显示裁剪之后的照片

package com.pingyijinren.test; import android.annotation.TargetApi; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.ContentResolver; import android.content.Intent; impo

Android 调起系统相机拍照

概述 最近在看 nanChen 写的图片选择器 ImagePicker,感觉写得很不错,也打算把从中学到的东西写下来.很多时候,遇到一个好的框架能够降低开发成本这是好事.但是也要去了解其内部具体实现逻辑,说不定哪天你需要完成一个类似的小功能,你知道原理就能快速写出来,而不是引入整个框架. 本文讲其中的第一个功能:如何调起手机的相机拍照? 系统现有相机应用 对于如何调用系统现有应用,这里简单再说一下.在开发的应用中调用系统现有应用,需要使用 Intent 指定开启的应用的 Action 和 Cat

Android 调用系统相机拍照保存以及调用系统相册的方法

系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(camera, CAMERA); 相机返回的数据通过下面的回调方法取得,并处理: public static final int CAMERA  = 0x01; @Over

Android调用相机拍照获取原始照片

Android调用相机拍照,获取原始照片的解决方案如下:注意要有读取文件的权限,需要添加如下的权限:<uses-permission android:name="android.permission.CAMERA" />按钮点击事件: public void click(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//相机捕捉图片的意图 intent.putExtra(Me

android调用系统相机拍照并保存在本地

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import android.annotation.SuppressLint; import android.app.Activity; import an

调用android系统相机拍照并保存图片

android调用系统相机拍照并保存图片 调用系统相机: //在某个事件中添加如下代码即可,不是说单击事件都不会写啊startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE),1); 解释:其中参数MediaStore.ACTION_IMAGE_CAPTURE是调用系统相机用的,而后面的1则是请求的Activity的标志,用来处理返回结果的 可以理解为:给系统相机的Activity添加一个请求标志,在用onActivity