0

わかりました、カメラアプリを作成し、一部は画像サイズを選択しています。これは次のコードで行われます:

Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();

サポートされているサイズの素敵なリストを取得します。2 つの最悪の解像度は 640x480 と 320x240 です。しかし、解像度を 320x240 に設定すると、代わりに 640x480 が使用されます!

次のコードで解像度を設定します。

private void setImgSize() 
{
    Log.d(TAG, "+setImgSize");
    Camera.Parameters params = camera.getParameters();
    params.setPictureSize(WIDTH, HEIGHT);
    camera.setParameters(params);

    Toast.makeText(getApplicationContext(), 
        "Resolution set to "+WIDTH+"x"+HEIGHT, 
        Toast.LENGTH_SHORT).show();
}

WIDTH と HEIGHT は settingsactivity から返される値であり、解像度が 320x240 に設定されていることを伝える素敵なトーストが表示されます。しかし、画像がキャプチャされたときの解像度は 640x480 です! わかりました、test2。解像度を 640x480 に設定しましょう。Toast は、解像度が 640x480 であることを示しています。涼しい。いくつかの画像をキャプチャしてみましょう。解像度は定義どおり 640x480 です。

それで、私はここで何が間違っているのですか、そして/または私が理解していないのですか?!?! サポートされている画像サイズを取得しましたが、そのうちの少なくとも 1 つがサポートされていません。選択した解像度が実際にサポートされているかどうかを確認する方法はありますか?

私が使用しているデバイスは、Android バージョン 2.3.5 の Huawei Ideos X5 / U8800 です。

手伝ってくれてありがとう :)

PSそして、誰かがなぜ私がそのような安っぽい解像度を使いたいのかと尋ねる前に、これが理由です:このアプリはN秒間隔で画像をキャプチャします. そして、アプリケーションが実行されている場合、たとえば、非常に長い間、大きな画像でSDカードのスペースが不足する可能性があります:)

edit : setImgSize() メソッドを変更し、次のようになりました。

private void setImgSize() {
    Log.d(TAG, "+setImgSize");
    Camera.Parameters params = camera.getParameters();
    params.setPictureSize(WIDTH, HEIGHT);
    // set jpeg quality to best
    params.setJpegQuality(100);

    camera.setParameters(params);

    params = null;
    params = camera.getParameters();
    Camera.Size size = params.getPictureSize();
    Toast.makeText(getApplicationContext(), 
                "Resolution set to "+size.width+"x"+size.height,                
                Toast.LENGTH_SHORT).show();
}

解像度(320x240)を設定し、再読み取りパラメーターから読み取ると結果は320x240になりますが、画像がキャプチャされると解像度は640x480になります:(

4

1 に答える 1

1

サポートされている画像サイズを知るにはgetSupportedPictureSizes()、から呼び出す必要があると思います。Camera.Parameters

次に、実際に設定したい画像サイズに最も近い、サポートされている画像サイズを選択できます。

于 2013-02-20T12:59:45.523 に答える