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 1ec3ae5..0c6931d 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" @@ -31,7 +31,7 @@ ``` - アプリ起動時のデフォルト画面は **撮影画面(S-01)** とする -- 画面切り替えには `BottomNavigationBar` を使用する(タブ 2 つ: 撮影 / 一覧) +- 画面切り替えには `home_screen.dart` の `BottomNavigationBar` を使用する(タブ 2 つ: 撮影 / 一覧) - 画像の詳細表示は一覧画面内の `Stack` オーバーレイで実装し,独立画面・ダイアログとしない ## 撮影画面 (S-01: Capture Screen) @@ -64,6 +64,7 @@ | カメラプレビュー | インカメラのライブ映像.鏡像(左右反転)+上下反転で表示.画面いっぱいに拡大し中央をクロップ | | シャッターボタン | 丸型ボタン(画面下部中央).タップで撮影実行.連続撮影可 | | タイマーボタン | 画面左下に配置.ON(黄色)/ OFF(グレー)を切り替える.ON 時はシャッター押下後 3 秒のカウントダウン表示の後に撮影 | +| サウンドボタン | 画面右下に配置.シャッター音・保存完了音の ON(黄色)/ OFF(グレー)を切り替える.設定は次回起動時も保持(`shared_preferences`) | | 明るさスライダー | ナビバーの直下に配置.画面の輝度を手動で調整する(デフォルト: 0.8) | | BottomNavigationBar | 撮影タブ(アクティブ)/ 一覧タブ.背景色は黒系で統一.保存中はタップ無効 | @@ -123,7 +124,7 @@ ### 動作仕様 -- **画面表示時**: `Pictures/MiniTIAS/` ディレクトリ内の PNG ファイルを走査し,一覧を構築する +- **画面表示時**: `Pictures/MiniTIAS/` 内のプレビュー JPEG(`.preview.jpg`)と旧通常モードの `.png` を走査し,一覧を構築する(DNG 本体は一覧では直接表示しない) - **リフレッシュ**: 撮影画面から戻った際に一覧を再取得する - **詳細表示**: サムネイルタップで詳細表示オーバーレイを開く.× ボタンで閉じる - **削除**: 詳細表示の削除ボタンから確認ダイアログで「削除」を選択すると,ファイルをストレージから削除し,一覧から除去する @@ -243,7 +244,7 @@ ### 保存先 - パス: `Pictures/MiniTIAS/`(Android 共有ストレージ) -- Android 10 以上では MediaStore API を使用する(`saver_gallery` パッケージで抽象化) +- ネイティブ側で共有ストレージに直接書き込み,保存後に `MediaScannerConnection.scanFile`(MethodChannel `scanFile`)で MediaStore に登録する - ディレクトリが存在しない場合は自動作成する ### ファイル命名規則 @@ -262,18 +263,20 @@ ### 重複回避ロジック ```text -ファイル名候補 = "MiniTIAS_{timestamp}.png" +baseName = "MiniTIAS_QM_{timestamp}" -IF ファイル名候補が存在しない: - RETURN ファイル名候補 +IF "{baseName}.dng" が存在しない: + RETURN baseName suffix = 1 -WHILE "MiniTIAS_{timestamp}_{suffix}.png" が存在する: +WHILE "{baseName}_{suffix}.dng" が存在する: suffix += 1 -RETURN "MiniTIAS_{timestamp}_{suffix}.png" +RETURN "{baseName}_{suffix}" ``` +※ baseName をもとに `.dng` / `.meta.json` / `.preview.jpg` の 3 ファイルを共通名で生成する. + ### 削除 - 一覧画面の詳細表示オーバーレイから削除を実行する @@ -391,7 +394,7 @@ ### パフォーマンス -- 撮影から保存完了まで 2 秒以内を目標とする +- 撮影操作から次の撮影が可能になるまでを,研究運用上ストレスのない時間に収める(旧 PNG 経路は約 2 秒.DNG 定量モードは設定反映のための 3 枚連続キャプチャ + 約 16 MB の DNG 書き込みのぶん長くなる) - 一覧画面のサムネイル読み込みは非同期で行い,画面表示をブロックしない ### データ保全 @@ -402,5 +405,5 @@ ### 対応端末 - 試験端末: AQUOS sense3(SH-02M,Android 9) -- minSdkVersion: 21(Android 5.0) +- minSdkVersion: `flutter.minSdkVersion`(`android/app/build.gradle.kts` が参照する Flutter 規定値) - targetSdkVersion: Flutter デフォルト(最新安定版に追従)