こんにちは、KID.Aです。
以前、Cameraのプレビューサイズとピクチャーサイズの比率の検証でプレビューサイズとピクチャーサイズの比率が同じでも撮影中と撮影後の写真が異なってしまう機種があることや、比率によって撮影前と撮影後で縦・横の両方が写らないパターンがあるということを記載しました。
これらの機種依存や現象について記載していきたいと思います。
- プレビューサイズとピクチャーサイズの比率が同じでも撮影中と撮影後の写真が異なってしまう現象について
P-02D(4.0.4)で試した際に比率が同じだけど、なぜかプレビューサイズがきれてしまうという現象がありました。
下記の図のように4:3同士なのにプレビューサイズが720 x 540の場合は、プレビューサイズの画像の一番下がピクチャーサイズに比べて少し切れているのがわかります。
※写真をとったときにぶれてしまったのでピクチャーサイズが多少ぼやけています。
プレビューサイズ 4:3 (720 x 540) | ピクチャーサイズ 4:3 (4160 x 3120) |
---|---|
![]() |
![]() |
4:3同士でもプレビューサイズが640×480の場合はうまくいきます。
プレビューサイズ 4:3 (640 x 480) | ピクチャーサイズ 4:3 (4160 x 3120) |
---|---|
![]() |
![]() |
P-02Dはプレビューサイズが720×540のサイズだけピクチャーサイズと比率が同じでも表示上、おかしくなってしまうということがわかりました。
そのため、720×540のサイズを外すという機種依存対応が必要です。(それ以外思いつかなかったです)
対策は以下のようなメソッドを作ります。
public static boolean isAllowedPreviewSize(int previewWidth, int previewHeight) { if ("P-02D".equals(Build.MODEL)) { if (previewWidth == 720 && previewHeight == 540) { return false; } } return true; }
Cameraのプレビューサイズとピクチャーサイズの比率の検証で記載したプレビューサイズとピクチャーサイズの同一比率を抜き出す処理に先程のメソッドを加えます。
List previewSizes = params.getSupportedPreviewSizes(); List pictureSizes = params.getSupportedPictureSizes(); // プレビューサイズとピクチャーサイズが同一比率の解像度を選択する for (Size picSiz: pictureSizes) { for (Size preSiz: previewSizes) { if (picSiz.width * preSiz.height == preSiz.width * picSiz.height) { if (isAllowedPreviewSize(preSiz.width, preSiz.height) { // ここでpreSizとpicSizが同一の比率と判定できます } } } }
あまり機種依存対応はしたくはないのですが、カメラなどのハードウェア機能の周りはやはり多いものです。
- 比率によって、縦、横、両方が写らないパターン
L-06D(4.0.4)で確認していた際に、ピクチャーサイズの写真の縦・横の一部がプレビューサイズで写らないことがわかりました。
プレビューサイズとピクチャーサイズの比率は以下のパターンで発生します。
プレビューサイズ 30:17 (1920 x 1088) | ピクチャーサイズ 4:3 (3264 x 2448) |
---|---|
![]() |
![]() |
プレビューサイズはルービックキューブの上の机が写らないのにピクチャーサイズは写っています。また、プレビューサイズとピクチャーサイズの左のルービックキューブをみると横の写り具合も異なるのがわかります。
このような縦・横が切れてしまうパターンがあるため、やはりプレビューサイズとピクチャーサイズは同じ比率に合わせた方がよいと思われます。
以上、Camera APIのプレビューサイズとピクチャーサイズの機種依存でした。