android - 如何计算android中自定义相机中的剩余照片数

标签 android image android-camera resolution

我正在尝试计算可以使用我的自定义相机拍摄的剩余照片数量,并将该计数显示给用户。我尝试使用以下代码:

private void numberOfPhotosAvailable() {
        long photosAvailable = 0;
        StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
        resolution=getResolution();
        long bytesPerPhoto=resolution/1048576;
        long bytesAvailable = (long) stat.getAvailableBlocksLong() * (long) stat.getBlockSizeLong();
        long megAvailable = bytesAvailable / 1048576;

        System.out.println("Megs :" + megAvailable);
        photosAvailable = megAvailable / bytesPerPhoto;
        tvAvailablePhotos.setText("" + photosAvailable);
    }

获取分辨率的方法。

public long getResolution(){
        long resolution=0;
        Camera.Parameters params=mCamera.getParameters();
        List<Camera.Size> sizes = params.getSupportedPictureSizes();

        Camera.Size size = sizes.get(0);
        int width=size.width;
        int height=size.height;
        resolution=width*height;
       return resolution;
    }

问题: 手机相机中显示的计数与我的应用中显示的计数有很大差异。

那么这样做的正确方法是什么?

注意:我只会以可用的最高质量拍摄图像。因此,我只根据一种分辨率计算计数。

最佳答案

不可能找到 JPEG/PNG 压缩输出图像的确切大小。压缩算法经过优化,使用尽可能小的尺寸但保留图像像素(尽管 JPEG 略有损耗)。

但是,您可以通过拍摄多张样本照片并计算平均压缩率来估计图像的数量。

来自 Wikipedia :

JPEG typically achieves 10:1 compression with little perceptible loss in image quality.

因此估计的存储大小可以计算为:

int bytes = width * height * 2 / compressionRatio;

这里乘以 2 因为在 RGB_565 配置中,它需要 2 个字节来存储 1 个像素。

关于android - 如何计算android中自定义相机中的剩余照片数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46225646/

相关文章:

php - Laravel 上传时如何为图像指定唯一的名称?

java - 如何去除相机预览中的卷帘快门效果?

android - 相机变焦不起作用

c# - 使用 c#/php/anylanguage 检测纸上的签名点

java - Android长文本分页

java - 错误: Could not find HelloAndroid. APK

android - Firestore 查询 - 一对多关系

php - 如何检测 URL 是否引用图像

java - 如何将相机 View 设置为具有 View 的背景?

java - 如何在类内部执行从类内部适配器访问的内部类