Android Camera アプリの落とし穴
NetBeans で Android 実機デバッグをやってみた で作ったカメラを使うアプリの落とし穴をメモ
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// カメラのプレビューのサイズを設定
if (mCamera != null) {
mCamera.stopPreview();
setPreviewSize(width, height);
// カメラのプレビューを開始
mCamera.setPreviewCallback(previewCallback);
mCamera.startPreview();
}
}
private void setPreviewSize(int width, int height) {
Camera.Parameters params = mCamera.getParameters();
List<Camera.Size> supported = params.getSupportedPreviewSizes();
if (supported != null) {
for (Camera.Size size : supported) {
if (size.width <= width && size.height <= height) {
params.setPreviewSize(size.width, size.height);
X_RATIO = (float) width / (float) size.width;
Y_RATIO = (float) height / (float) size.height;
mCamera.setParameters(params);
break;
}
}
}
}
一つ目の落とし穴
プレビューサイズはそのデバイスがサポートしているものをセットする。
上記コードでは setPreviewSize(width, height); でサポートしている解像度の一番大きいのを選んでます。
二つ目の落とし穴
デバイスに表示されるプレビューはカメラがサポートしている解像度と一緒ではない。(表現が変ですみません)
私の XPERIA arc では 640 X 480 のプレビュー画像を 854 X 480 に引き延ばして表示されてしまいました。
そのため顔認識で得た face.getMidPoint(point); の両目の中心位置情報とデバイスに表示される実際の位置がずれてしまいました。
合成用の画像を最後に追加したときの座標は 640 X 480 のまま引き延ばされないで表示されていました。(右側 214 余り(×_×)
融通が利かないというか・・・なんていうか・・・
しかたないので合成用の画像の座標位置に補正をかけることで対処しました。
以上、素人が落とし穴に落ちた状況をφ(..)メモメモ
対処方法とか、そもそも作り方が根本的に間違ってるかもしれませんが Android ってバージョンアップのスピードは速いし
次から次へと新しい機種が追加されるから落とし穴がけっこうあるかもしれないですね。