0

我想从我的应用程序中使用

Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camera, TAKE_PICTURE);

并将其发送到网络服务器。但由于网络服务器将其压缩为大小不超过 50 kb的150x150 图像,因此我不需要拍摄一些3264x2448大小 ~ 2 mb的图像,因为发送传输需要大量时间。我想拍摄最小尺寸的图像。

那么,有没有办法让相机提供特定尺寸的图像?

我尝试使用 Camera API 并更改其属性:

private Camera mCamera;

Camera.Size pictureSize = getSmallestPictureSize(mCamera
                .getParameters());
        if (pictureSize != null) {
            mCamera.getParameters().setPictureSize(pictureSize.width,
                    pictureSize.height);
        }

private Camera.Size getSmallestPictureSize(Camera.Parameters parameters) {
        Camera.Size result = null;

        for (Camera.Size size : parameters.getSupportedPictureSizes()) {
            if (result == null) {
                result = size;
            } else {
                int resultArea = result.width * result.height;
                int newArea = size.width * size.height;

                if (newArea < resultArea) {
                    result = size;
                }
            }
        }

        return (result);
}

问题是我仍然得到更大的图像。但这不是实际问题:

当我为此使用预览时,就像这样

在此处输入图像描述

不允许用户旋转预览、放大/缩小等。

有没有办法使用带有自定义参数的实际相机预览?

4

1 回答 1

0

一些相机开始在横向模式下拍摄一些在纵向模式下的图像。这可以在 sdk 级别修复,对于 cpu,它在运行时会有点昂贵,但可以完成。

您需要更小的尺寸:

- 在 sdk 级别实现一个管道,您将在其中将捕获的图像缩小到原始图像的 10-15%,它会耗尽电池,但可以做到。- 在 ndk 级别,您必须为每个支持的相机实现自定义驱动程序......对于这个自定义驱动程序,您也将实现自定义软件,一切都很好。

于 2013-04-18T07:53:24.407 回答