diff --git "a/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" index 9381a5c..73163b7 100644 --- "a/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" +++ "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" @@ -27,7 +27,7 @@ | パッケージ | 用途 | 備考 | | --- | --- | --- | | `camera` | インカメラのライブプレビュー・撮影 | Flutter 公式プラグイン | -| `image` | 撮影画像の PNG エンコード | JPEG → PNG 変換に使用 | +| `image` | 撮影画像の PNG エンコード | YUV → RGB → PNG 変換に使用 | | `path_provider` | アプリ内ファイルパスの取得 | 保存先ディレクトリの参照に使用 | | `permission_handler` | カメラ・ストレージの権限管理 | Android の実行時権限リクエスト | | `provider` | 状態管理 | Flutter 公式推奨.シンプルかつ拡張しやすい | diff --git "a/docs/04_SPEC/SPEC_01_\347\224\273\351\235\242\346\251\237\350\203\275\344\273\225\346\247\230\346\233\270.md" "b/docs/04_SPEC/SPEC_01_\347\224\273\351\235\242\346\251\237\350\203\275\344\273\225\346\247\230\346\233\270.md" index 1871eb1..d1f0e6d 100644 --- "a/docs/04_SPEC/SPEC_01_\347\224\273\351\235\242\346\251\237\350\203\275\344\273\225\346\247\230\346\233\270.md" +++ "b/docs/04_SPEC/SPEC_01_\347\224\273\351\235\242\346\251\237\350\203\275\344\273\225\346\247\230\346\233\270.md" @@ -135,7 +135,7 @@ | 解像度 | `ResolutionPreset.max`(カメラが対応する最大解像度) | | フォーカス | オートフォーカス(デフォルト動作) | | フラッシュ | OFF(LED ライトはアタッチメント側で制御) | -| 画像フォーマット | カメラ出力は JPEG → アプリ内で PNG に変換して保存 | +| 画像フォーマット | Camera2 API で YUV_420_888 生データを取得し,PNG に直接変換して保存(JPEG 非経由) | ### プレビュー表示 @@ -152,13 +152,22 @@ シャッターボタンタップ │ ▼ -CameraController.takePicture() +プレビュー停止(CameraController.dispose()) │ ▼ -一時ファイル(XFile)取得 +Camera2 API でフロントカメラを開く(YUV_420_888,フル解像度) │ ▼ -PNG エンコード(image パッケージ) +AE/AF 安定のため 1 秒間プレビューフレームを流す + │ + ▼ +STILL_CAPTURE リクエストで YUV フレームを 1 枚取得 + │ + ▼ +YUV → RGB 変換(BT.601 係数,isolate で実行) + │ + ▼ +PNG エンコード(image パッケージ,ロスレス) │ ▼ ファイル名生成(命名規則に従う) @@ -167,7 +176,10 @@ Pictures/MiniTIAS/ に保存 │ ▼ -MediaStore 通知(ギャラリーアプリへの反映) +MediaStore 通知(MediaScannerConnection でスキャン) + │ + ▼ +Camera2 を閉じ,プレビューを再開 │ ▼ スナックバーで保存完了を通知