0

を使用してアプリケーションから写真を撮りたい

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

そしてそれをウェブサーバーに送信します。しかし、ウェブサーバーはそれを50 kb 以下のサイズの150x150 画像に圧縮するので、転送を送信するのに非常に多くの時間がかかるため、サイズ ~ 2 mbの3264x2448 画像を取得する必要はありません。最小サイズの画像を撮りたい。

カメラに特定のサイズの画像を要求する方法はありますか?

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 に答える