Android 通过电子邮件发送全尺寸照片
我正在开发一个应用程序,其中包括使用设备的摄像头拍照,然后通过电子邮件共享 我遇到的问题是,我无法让应用程序拍摄全尺寸的照片。它总是发送分辨率较低的照片,尽管相机设置为5MP,压缩时的质量设置为100。下面是我的代码:Android 通过电子邮件发送全尺寸照片,android,email,bitmap,photo,Android,Email,Bitmap,Photo,我正在开发一个应用程序,其中包括使用设备的摄像头拍照,然后通过电子邮件共享 我遇到的问题是,我无法让应用程序拍摄全尺寸的照片。它总是发送分辨率较低的照片,尽管相机设置为5MP,压缩时的质量设置为100。下面是我的代码: private void takePicture(){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); } p
private void takePicture(){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == CAMERA_PIC_REQUEST && resultCode == Activity.RESULT_OK){
picture = (Bitmap) data.getExtras().get("data");
pictureView.setImageBitmap(picture);
ContentValues values = new ContentValues();
values.put(Images.Media.TITLE, "Picture");
values.put(Images.Media.BUCKET_ID, "picture_ID");
values.put(Images.Media.DESCRIPTION, "");
values.put(Images.Media.MIME_TYPE, "image/jpeg");
pictureUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
OutputStream outstream;
try{
outstream = getContentResolver().openOutputStream(pictureUri);
picture.compress(Bitmap.CompressFormat.JPEG, 100, outstream);
outstream.close();
}catch(FileNotFoundException e){
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用键MediaStore.extra\u OUTPUT将文件的URI作为值,为
操作\u IMAGE\u CAPTURE
意图提供了一个额外的值。如果您不提供此额外信息,则拍摄图像的缩小版本将返回到带有数据意图的onActivityResult()
这是因为全尺寸的相机图片对于意图系统来说太大而无法处理(理论上它可能会工作,但会大大降低整个意图处理的速度-通常意图应该尽可能小)。所以它不能像小尺寸版本那样交付
要使用此额外选项,请修改您的takePicture()
方法,例如:
private void takePicture() {
File outputFile = new File(Environment.getExternalStorageDirectory(),
"image.jpg");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outputFile));
startActivityForResult(intent, 1);
}
这与上面的方法类似,只是当调用onActivityResult()
时,相机应用程序已将图像的全尺寸副本写入您指定的文件中。
这意味着您不必自己将映像写入磁盘,只需在执行
onClickListener()
时从磁盘打开映像即可。非常感谢您花时间解释它。然而,一旦我添加了新的额外意图,一旦我拍照,什么都不会发生。我按下相机菜单中的“Ok”按钮,它就会停留在那里。用“image.jpeg”替换“…”是否有问题?是的,这必须是文件的有效路径。如果这样做,则以“file.jpeg”结尾,这是无效的,因为您没有指定目录。我稍微更新了代码。现在,它将图像写入到(通常是sd卡或大型内部闪存)的根目录中。一般来说,这应该可以工作(只是在一个示例项目中进行了测试)。我也不能告诉你为什么你的应用程序在没有stacktrace的情况下崩溃。由于这是一个不同于整个“小图像”的问题,我想说,请打开一个新的问题,包括stacktrace和相关的代码。
private void takePicture() {
File outputFile = new File(Environment.getExternalStorageDirectory(),
"image.jpg");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outputFile));
startActivityForResult(intent, 1);
}