5

私のアプリは、表面ホルダーを使用してカメラを開きます。カメラがデフォルトのプレビュー サイズで開きます。特定のデバイスでは、デフォルトのプレビュー サイズでは、実際に画面に表示されるよりも多くの画像がキャプチャされます。これを避けるために、プレビューサイズを自分で設定するようになりました。基準は、使用可能なサイズのリストから、画面の幅に最も近いプレビュー サイズを選択することです。

これはほとんどの場合うまく機能します。しかし、選択したプレビュー サイズが気に入らないデバイスに出くわすことがよくあります。

1) Nexus 4 は、選択したプレビュー サイズのいずれかの画像をキャプチャしませんでした。2) Samsung S 4 では、キャプチャした画像に沿って帯状の線 (ノイズ) が発生します。

だから私は標準に反して何かをしているかどうかを理解したかった. ここに私の質問があります:-

1) 表面ホルダーを使用してカメラを開きます。アプリでカメラ ハードウェアを使用できる他の方法はありますか。

2) 使用可能なサイズのリストからプレビュー サイズを選択しています。サイズを選択する前に、具体的に何を探す必要がありますか? サイズを選択するためのロジックを以下に示します:-

private Camera.Size getBestPreviewSize(int width, int height)
    {
        List<Size> sizes = camera.getParameters().getSupportedPreviewSizes();
        if (sizes == null) return null;

        Size optimalSize = null;
        double minDiff = Double.MAX_VALUE;

        int targetHeight = height;
        int targetWidth = width;

        int minWidthDiff = 0;
        if (optimalSize == null) {
            minDiff = Double.MAX_VALUE;
            for (Size size : sizes) {
                if (Math.abs(size.width - targetWidth) < minDiff) {
                    if(size.width > width) {
                        if (minWidthDiff == 0) {
                            minWidthDiff = size.width - width;
                            optimalSize = size;
                        }
                        else if (Math.abs(size.width - targetWidth) < minWidthDiff) {
                            minWidthDiff = size.width - width;
                            optimalSize = size;

                        }   
                        minDiff = Math.abs(size.width - targetWidth);
                     }
                }
            }
        }

        if (optimalSize == null) {
            minDiff = Double.MAX_VALUE;
            for (Size size : sizes) {
                if (Math.abs(size.height - targetHeight) < minDiff) {
                    optimalSize = size;
                    minDiff = Math.abs(size.height - targetHeight);
                }
            }
        }
        return optimalSize;
    }

これに関する指示は本当に役に立ちます。

ありがとう !!ガガン

4

1 に答える 1

10

カメラで作業する場合、考慮すべきいくつかの異なるサイズがあります。

センサー サイズ カメラには、ハードウェアによって決定されるネイティブの解像度と縦横比があります。

画像サイズ カメラに写真を撮らせたときに生成される画像のサイズです。ネイティブ解像度と同じ縦横比の場合は、そこから直接スケーリングされます。縦横比が異なる場合は、元のサイズからトリミングされます。私の経験では、返される最大サイズgetSupportedPictureSizesはカメラのネイティブ解像度です。

プレビューサイズ画面に表示される 画像プレビューのサイズです。ネイティブ サイズまたは画像サイズとは異なる縦横比である可能性があり、さらにトリミングが発生します。

画面に表示されているものと写真を撮ったときに生成される画像を最もよく一致させるには、選択した画像サイズの縦横比にできるだけ近い縦横比のプレビュー サイズを選択してみてください。私は通常、ネイティブ サイズにできる限り近づけるようにしています。

于 2013-10-08T22:32:24.290 に答える