カメラアプリの基幹となるコードと、Camera.Parameters に関するメモです。
これらの内容について、下記を参考にさせて頂きました。ありがとうございます!
上記でも触れられていますが、AndroidManifest.xml への記述漏れは忘れやすいので要注意です。
また、製作中のカメラアプリでは、Bitmap から外部ストレージに保存しています。その点は今後、別の記事にまとめたいと思います。
上記の参考サイトにもありますように、カメラのプレビューを開始するために、下記のようなコードを書きます。
OS 2.1 以上の端末では、setPreviewSize メソッドは使わないほうが良い。
// カメラのパラメータを取得 Camera.Parameters parameters=camera.getParameters();// パラメータにプレビュー表示のサイズを設定parameters.setPreviewSize(w,h);// 再度、パラメータをカメラに戻す。 camera.setParameters(parameters); // プレビュー開始 camera.startPreview();
このコードの parameters に、色々なメソッドで設定を追加することが出来ます。が、Android 1.6 つまり Xperia では、使えるメソッドが大幅に制限されます。
上記リファレンスの右上に、Filter by API Level という項目があります。ここを 4 にすると、Android 1.6 相当になります。
特に困るのが、getSupportedPictureSizes() と getSupportedPreviewSizes() が使えないことです。これで、Xperia で使用できる写真サイズ、プレビューサイズの一覧を取得することが出来ません。逆に、2.0 以上であれば、機種それぞれの端末差をこのメソッドで吸収することができるのではないかと思います(使った事ないので、自信ないですが・・・)。
ということで、2.0 の前後で下記に紹介されているような対策をとる必要があります。(参考にさせて頂きました。ありがとうございます!)
ちなみになんですが、私の手元の Xperia で確認したところ、プレビューサイズ 320x240、640x480 は設定出来ませんでした。ので、作成中のカメラアプリでは、SurfaceView をリサイズして対応しています。
また、写真サイズも、Xperia™| 主な仕様 | ソニー・エリクソン こちらに載っている 3264×2448、1632×1224 のサイズと、640×480 のみ setPictureSize() メソッドで設定できました。その他の値を設定すると、すべて 640×480 になってしまいました。他にも有効なサイズがあるかもしれませんが、getSupportedPictureSizes() が使えませんので、自力で探すしかありません(涙)。。
訂正します。Xperia で色々試した結果なんですが、「 setPreviewSize , setPictureSize の兼ね合いがかなりシビアなのではないか 」という結論に至りました。例えば、16:9 の写真をとる場合、setPreviewSize , setPictureSize お互いに 16:9 の値を入れないと撮れないみたいです。4:3 でも同じです。
また、もさもさあたまさいと: Android HT-03Aのカメラサイズ でご指摘されているように、surfaceChanged が取ってくれる幅、高さの値が怪しいです。ので、端末サイズに合わせる場合は、DisplayMetrics クラスから取得したほうが良いように思います。
あと、下記のようなメソッドが 1.6 では使えないです。2.0、2.2 以降になれば下記のようなメソッドが使えるので、もっとカメラアプリの作成が簡単になるのではないかと思います。
http://web.dimension-maker.info/cgi-bin/mt/webdimensionmaker/209