Windows 8 提供兩套相機 API:**`CameraCaptureUI` (高階、系統 UI、零配置)** 與 **`MediaCapture` (低階、自訂 UI、完全控制)**。本文深度解析 `CameraCaptureUI` 的全螢幕拍攝體驗、內建編輯、設定面板,並給出何時必須升級 `MediaCapture` 的決策矩陣。


照片設定 (`PhotoSettings`):

影片設定 (`VideoSettings`):

using Windows.Media.Capture;
using Windows.Storage;
using Windows.UI.Xaml.Media.Imaging;
// 類別欄位
private StorageFile _photoFile;
private async void OnCapturePhoto(object sender, RoutedEventArgs e) {
var camera = new CameraCaptureUI();
// 可選設定
camera.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;
camera.PhotoSettings.CroppedAspectRatio = new Size(16, 9); // 16:9 裁剪
camera.PhotoSettings.MaxResolution = CameraCaptureUIMaxPhotoResolution.HighestAvailable;
// 呼叫系統 UI,使用者完成拍照/裁剪/確認後回傳檔案
_photoFile = await camera.CaptureFileAsync(CameraCaptureUIMode.Photo);
if (_photoFile != null) {
// 顯示預覽
var bitmap = new BitmapImage();
using (var stream = await _photoFile.OpenReadAsync()) {
await bitmap.SetSourceAsync(stream);
}
PreviewImage.Source = bitmap;
// 可選:直接喚起分享合約
DataTransferManager.ShowShareUI();
}
}
private StorageFile _videoFile;
private async void OnCaptureVideo(object sender, RoutedEventArgs e) {
var camera = new CameraCaptureUI();
camera.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4; // 跨平台相容性最佳
camera.VideoSettings.MaxDuration = TimeSpan.FromMinutes(5);
camera.VideoSettings.AllowTrimming = true;
_videoFile = await camera.CaptureFileAsync(CameraCaptureUIMode.Video);
if (_videoFile != null) {
// 設定 MediaElement 來源播放
var stream = await _videoFile.OpenReadAsync();
MediaPlayer.SetSource(stream, _videoFile.ContentType);
MediaPlayer.Play();
DataTransferManager.ShowShareUI();
}
}

| 場景 | 推薦 API | 理由 |
|---|---|---|
| 使用者大頭貼/個人資料照片 | CameraCaptureUI | 內建裁剪完美適配圓形頭像比例 (1:1),無需自行開發裁剪 UI。 |
| 文件掃描/條碼掃描/即時 AR | MediaCapture | 需即時畫面分析 (OpenCV/ML.NET)、自訂覆疊 UI、控制對焦/曝光參數、高幀率預覽。 |
| 社交短影音錄製 (含濾鏡/貼紙/音樂) | MediaCapture + Win2D/Composition API | 需即時視訊特效、多軌音訊混音、自訂錄製管線。 |
| 簡單錄影備忘/證據保存 | CameraCaptureUI | 內建剪輯、防震動、格式轉換,零開發成本。 |
| 多相機切換 (前/後/外接 USB) | MediaCapture | `MediaCapture.InitializeAsync` 可指定 `VideoDeviceId` 動態切換。 |
| 背景/鎖屏/無 UI 錄製 | MediaCapture | `CameraCaptureUI` 必須前景全螢幕,無法背景運作。 |
| 相容性測試/自動化測試 | MediaCapture | 可程式化控制每一幀,無系統 UI 干擾。 |
預設選 CameraCaptureUI,除非你需要:即時畫面分析、自訂 UI 覆疊、背景錄製、多相機切換、即時特效/濾鏡、自動化測試。
`CameraCaptureUI` 是 Windows 8 給開發者的禮物:**將複雜的相機硬體抽象、系統級 UI/UX 最佳實踐、隱私權限管理、編輯後製流程全部封裝在一個非同步方法中**。善用它,能讓 90% 的拍照/錄影需求在幾小時內交付;識別其邊界,並在必要時果斷遷移至 `MediaCapture`,是 Windows 多媒體開發者的核心判斷力。