Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何告诉默认设备摄像头应用程序不要拍摄最大的图像,而是拍摄较小的图像?_Android - Fatal编程技术网

Android 如何告诉默认设备摄像头应用程序不要拍摄最大的图像,而是拍摄较小的图像?

Android 如何告诉默认设备摄像头应用程序不要拍摄最大的图像,而是拍摄较小的图像?,android,Android,我正在使用设备摄像头,如下所示: private void checkWhetherCameraIsAvailableAndTakeAPicture() { // Check wether this device is able to take pictures if (isIntentAvailable(a, MediaStore.ACTION_IMAGE_CAPTURE)) { Intent takePictureIntent = new Intent(Med

我正在使用设备摄像头,如下所示:

private void checkWhetherCameraIsAvailableAndTakeAPicture() {
    // Check wether this device is able to take pictures
    if (isIntentAvailable(a, MediaStore.ACTION_IMAGE_CAPTURE)) {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File imageFile = null;
        try {
            imageFile = createImageFile();
            imagePath = imageFile.getAbsolutePath();
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile));
            takePictureIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 1*1024*1024L); // Limit image to 1MB
        } catch (IOException e) {
            e.printStackTrace();
            imageFile = null;
            imagePath = null;
        }
        startActivityForResult(takePictureIntent, Preferences.REQUEST_CODE_TAKE_IMAGE_WITH_CAMERA);
    }
}
然后相机打开,我拍摄了一张图像,得到了一个50MB的位图文件,试图使用它会导致一个巨大的OutOfMemory错误

正如您所见,我已经尝试将文件大小限制为1MB,但显然不起作用

现在,我知道如果我使用Camera.openCamera()对象,我可以在那里设置我喜欢的任何参数,但是我如何告诉设备摄像头拍摄比最大尺寸小一点的图像呢

正如您所见,我已经尝试将文件大小限制为1MB,但显然不起作用

更准确地说:

  • EXTRA\u SIZE\u LIMIT
    未记录用于
    ACTION\u IMAGE\u CAPTURE

  • 摄像头应用程序不必遵守任何特定的附加条款,并且有成千上万的摄像头应用程序

如何让设备摄像头拍摄比最大尺寸小一点的图像

你没有。你的选择是:

  • 提供
    额外的\u输出
    并获得相机应用程序想要给你的任何东西(通常是最大分辨率,尽管这可能由用户在某些相机中配置)

  • 不提供
    额外的\u输出
    并获取相机应用程序想要给你的任何东西(理论上是缩略图大小的图像)


乍一看,使用默认的照相机应用程序拍摄照片似乎非常简单,但也存在许多陷阱。我写了一个小助手来处理Android设备制造商和Android版本的所有不同实现:

此外,还有一个用于加载和缓存图像的强大库:


如果将这两个库组合起来,就不必担心文件大小等问题。

这太可怕了。所以我需要使用camera.openCamera()和SurfaceView来编写我自己的相机,如果我不想要成千上万像素的大图像?@J.K:欢迎你自己使用
inSampleSize
和你的
BitmapFactory.Options
下载图像时对图像进行下采样。这与第三方相机应用程序无关,而是任何您无法控制的图像源(例如,从互联网下载的图像)。好吧,这就是我目前正在做的-缩小图像的尺寸/缩小图像的采样,问题是从我收到的初始位图中产生的震动很大。我会确保检查这个!