你能在Android上使用图像而不保存到文件吗?

你能在Android上使用图像而不保存到文件吗?,android,Android,我正在尝试实现具有特定功能的摄像头应用程序。我需要用手机的照相机拍一张照片,然后处理那个图像。但是,我不需要将图片保存到文件中,我只需要从图片中获取一些数据。是否有一种方法可以拍摄照片,然后立即将其加载为位图,或者我至少需要保存它,读取它,然后删除它 我读了本教程:,但保存和删除图像似乎对处理器来说很沉重,所以如果可以的话,我想避免它。Ty启动意图 活动结果 注意:这个来自数据的缩略图对于图标来说可能很好,但不是很多。处理全尺寸图像需要更多的工作 启动意图 活动结果 注意:这个来自数据的缩略图对

我正在尝试实现具有特定功能的摄像头应用程序。我需要用手机的照相机拍一张照片,然后处理那个图像。但是,我不需要将图片保存到文件中,我只需要从图片中获取一些数据。是否有一种方法可以拍摄照片,然后立即将其加载为位图,或者我至少需要保存它,读取它,然后删除它

我读了本教程:,但保存和删除图像似乎对处理器来说很沉重,所以如果可以的话,我想避免它。Ty

启动意图

活动结果


注意:这个来自数据的缩略图对于图标来说可能很好,但不是很多。处理全尺寸图像需要更多的工作

启动意图

活动结果


注意:这个来自数据的缩略图对于图标来说可能很好,但不是很多。处理全尺寸图像需要更多的工作

同样,如果您跳过动作图像捕获时的额外输出,您将通过getExtradata返回缩略图位图

除此之外,您还可以直接使用摄像头API,例如android.hardware.camera

您可以尝试创建支持写入内存缓冲区而不是文件的ContentProvider,然后在额外输出中使用指向该提供程序的content:Uri。在不分割堆空间的情况下,使其正常工作可能很困难或不可能

总的来说,请记住,您可能没有堆空间来存放全分辨率图像。我不知道图片中某些数据的确切含义,但如果它取决于将整个图像加载到RAM中,那么实现这一点将面临挑战。

因为,如果您跳过动作图像捕获的额外输出,您将通过getExtradata返回缩略图位图

除此之外,您还可以直接使用摄像头API,例如android.hardware.camera

您可以尝试创建支持写入内存缓冲区而不是文件的ContentProvider,然后在额外输出中使用指向该提供程序的content:Uri。在不分割堆空间的情况下,使其正常工作可能很困难或不可能


总的来说,请记住,您可能没有堆空间来存放全分辨率图像。我不知道图片中的某些数据的确切含义,但如果它取决于将整个图像加载到RAM中,那么实现这一点将面临挑战。

以下是相关的API文档:

快门:图像捕捉瞬间的回调,或为空 原始:原始未压缩图像数据的回调,或null postview:具有postview图像数据的回调,可能为空
jpeg:jpeg图像数据的回调,或null

以下是相关的API文档:

快门:图像捕捉瞬间的回调,或为空 原始:原始未压缩图像数据的回调,或null postview:具有postview图像数据的回调,可能为空
jpeg:对jpeg图像数据的回调,或null

注意:此数据的缩略图可能适合用作图标,但不适用于更多。根据我提供的链接,处理全尺寸图像需要更多的工作。我没有意识到,似乎没有直接的方法来获取全尺寸图像。您被迫将其保存到文件中。如果您被迫将其保存到文件中,那么WhatsApp在直接拍摄和发送图像时如何处理?我真的无法想象没有更好的方法…注意:这个来自数据的缩略图可能适合作为图标,但不是更多。根据我提供的链接,处理全尺寸图像需要更多的工作。我没有意识到,似乎没有直接的方法来获取全尺寸图像。您被迫将其保存到文件中。如果您被迫将其保存到文件中,那么WhatsApp在直接拍摄和发送图像时如何处理?我真的无法想象没有更好的方法…应用程序可用的RAM有限,因此您肯定希望将图像保存到一个文件中,然后通过InputStream对其进行小部分解析。使用intents,没有,因为捆绑包的大小限制了可以传回的图像的大小。直接使用相机,应用程序可用的sure.RAM受到限制,因此您肯定希望将图像保存到文件中,然后通过InputStream对其进行小部分解析。使用intents,则不会,因为捆绑包的大小限制了可以传回的图像的大小。直接使用相机,当然。
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_REQUEST);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
    }  
} 
void takePicture (Camera.ShutterCallback shutter, 
            Camera.PictureCallback raw, 
            Camera.PictureCallback postview, 
            Camera.PictureCallback jpeg)