# 画面仕様 (Screen Specification)

現行アプリの画面構成を踏襲する．画面は 2 つ（メイン画面・結果画面）．

※ アプリアイコン（ウィンドウ・タスクバー・配布 exe）は旧実装と同一の ico（`packaging/TIASjudge.ico`．旧 MFC 実装の `IDR_MAINFRAME` 相当）を使用する．ico が見つからない場合はアイコン無しで起動を継続する（起動を妨げない）．

## 画面遷移 (Screen Flow)

```text
メイン画面
  ├─ 変換行列 CSV 選択 → 画像 PNG 選択 → 画像上を 1〜4 点クリック
  ├─ [舌色診断] → 結果画面（モードレス表示）
  └─ [診断続行] → 入力をリセットして次の診断へ
```

## メイン画面 (Main Window)

| 要素 | 仕様 |
| --- | --- |
| 変換行列選択 | ファイル参照（`.csv` のみ受付．他拡張子はエラー表示） |
| 画像選択 | ファイル参照（`.png` のみ受付）．読込時に中央基準で 1024×1280 にクロップ |
| 画像表示 | クロップ後画像を 1/2 縮小表示．未読込時はプレースホルダ画像 |
| ROI 指定 | 画像上の左クリックで 51×51 px の ROI を追加（最大 4 点．5 点目はエラー）．クリック位置に赤枠を描画，クリック済みマーク（●1〜●4）を表示 |
| リセット | 右クリックで全クリックを取り消し，画像を元に戻す |
| [舌色診断] ボタン | 1 点以上クリックで有効化．診断を実行し結果画面を開く．実行後は再クリック防止のため無効化 |
| L\*a\*b\* 表示 | 診断時に算出した L\*・a\*・b\* を表示 |
| 5 色スコア表示 | 紫・暗赤・紅・淡紅・淡白 の各一致率（%）を表示 |
| [診断続行] ボタン | 診断後に有効化．「同じ変換行列を使用するか」を確認し，画像・クリック状態をリセット |
| 結果画面の操作: 言語切替ボタン | 開いている全結果画面の表示言語を切替（ボタンラベルは切替先の言語名．日本語表示中は "English"）．**常時有効**で，次に開く結果画面にも適用される（診断続行後も維持）．言語状態はメイン画面が保持（初期値は日本語） |
| 結果画面の操作: [結果画面を閉じる] ボタン | 開いている全結果画面を閉じる．結果画面が 1 枚も無いときは無効 |

### 入力ガード（エラー表示）(Input Guards)

- 変換行列未読込でクリック → 「変換行列を読み込んでください」
- 画像未読込でクリック → 「画像を読み込んでください」
- クリック 0 点で診断 → 「1 点以上 4 点以下クリックしてください」
- 画像の端付近（ROI 51×51 が画像外にはみ出す位置）をクリック → 「画像の端から 25 px 以上内側をクリックしてください」

※ 端クリックのガードは旧実装に無い追加仕様（旧実装は OpenCV 例外でクラッシュしていた．ステップ 6 で追加）．

## 結果画面 (Result Window)

| 要素 | 仕様 |
| --- | --- |
| 診断画像 | クロップ後の元画像を 1/2 縮小表示 |
| 結果パネル | 5 色の行（色名 + 説明）を一覧表示し，**上位 2 色のみ**スコア（%）と下線を描画 |
| 診断失敗表示 | 診断失敗時（SPEC_02「診断失敗の判定」参照）に「Diagnosis failed / Please try again.」を表示 |
| 注記 | 「本結果は疾患の診断を行うものではない」「表示画像は明るさ補正されている」 |

※ 結果画面は**表示専用**（患者側モニタに操作 UI を出さないため，ボタンを持たない）．言語切替と「閉じる」はメイン画面の「結果画面の操作」から行う（タイトルバーの × でのみ直接閉じられる）．当初は結果画面内に言語切替・閉じるボタンがあったが，2 画面運用に合わせてメイン画面へ移した．
※ 英語の説明文は長文の行のみフォントサイズを小さく固定する（Red / Dark red は 36 px，Pale red は 30 px，他は 40 px．スコア表示と重ならない実測最大値．強調の有無でサイズは変えない）．

### 表示先モニタ（2 画面運用）(Target Monitor)

2 画面運用（施術者側＝メイン画面，患者側＝結果画面）を前提とし，結果画面は**メイン画面が表示されているモニタとは別のモニタに最大化**して表示する．

- 基準はメイン画面が実際に載っているモニタ（プライマリ固定ではない．メイン画面をサブ側に移せば結果はプライマリ側に出る）
- モニタが 1 台の場合は同一モニタに通常サイズで表示する（フォールバック）
- 結果パネルは 644×644 の固定描画のため，最大化時はスケーリングせず余白が増える．内容はウィンドウ中央に配置する
- デバッグ用 `--preview-result` はメイン画面が無いため，プライマリ以外のモニタを表示先とする

※ 2 画面表示は旧実装に無い追加仕様（ユーザー要望による）．

### 5 色の表示内容 (Color Rows)

| 色名（日） | 色名（英） | 説明（英語版） |
| --- | --- | --- |
| 淡紅 | Pink | Normal |
| 紅 | Red | Hot flush / feverish |
| 暗赤 | Dark red | Blood slightly thick |
| 紫 | Purple | Blood is thick |
| 淡白紅 | Pale red | Cold / fatigue / anemia |

※ 現行の日本語版は文字入り背景画像（`img_student2.bmp`）を使用している．新実装では日英とも描画で生成し，画像アセット依存を無くす（見た目は現行踏襲）．

※ 描画生成の色は旧背景画像からのピクセル実測値を使用する（見出し RGB(233,113,50)，5 色の色名は `result_window.py` の `COLOR_SWATCHES` 参照）．5 色の色名のみ黒縁取り（幅 2 px）を付ける．フォントサイズ・太さも旧画像のインク高実測に基づく（説明文は Medium）．

※ 5 色目の日本語表記は画面間で異なる: メイン画面は「淡白」，結果画面は「淡白紅」．旧実装（メイン画面ダイアログと結果画面の背景画像）がこの表記だったため，現行踏襲としてどちらもそのまま維持する（ステップ 7 で背景画像を実確認して確定）．
