You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3应用使用CameraCaptureUI拍照时部分Windows 10设备弹出拍摄后编辑窗口的解决方案咨询

WinUI 3应用使用CameraCaptureUI拍照时部分Windows 10设备弹出拍摄后编辑窗口的解决方案咨询

我之前做WinUI 3项目时也碰到过一模一样的问题——单独开系统相机app拍照片啥事没有,用CameraCaptureUI调用就弹出那个烦人的编辑窗口,折腾了好一阵才摸出几个可行的解决方向,给你参考:

  • 调整CameraCaptureUI的内置配置试试
    虽然CameraCaptureUI没有直接提供“禁用拍摄后编辑”的属性,但可以试试关闭裁剪功能,部分Windows 10设备上这个设置会关联到编辑窗口的触发。修改你的代码如下:

    var cameraUI = new CameraCaptureUI(windowId);
    cameraUI.PhotoSettings.AllowCropping = false; // 禁用裁剪选项,可能顺带关闭编辑弹窗
    var file = await cameraUI.CaptureFileAsync(CameraCaptureUIMode.Photo);
    

    不过要提前说,这个方法不是100%适配所有Windows 10版本,毕竟不同系统版本的CameraUI逻辑有差异。

  • 改用MediaCapture API实现自定义拍照(最稳妥的方案)
    CameraCaptureUI本质是调用系统封装好的相机UI,很多行为受系统版本和设备设置限制,没法完全自定义。如果想彻底摆脱这个编辑窗口,直接用MediaCapture API自己实现拍照流程是最靠谱的。给你贴个简化版的代码示例:

    using Windows.Media.Capture;
    using Windows.Media.MediaProperties;
    using Windows.Storage;
    
    private MediaCapture _mediaCapture;
    
    // 先初始化MediaCapture(可以在页面加载时调用)
    private async Task InitializeMediaCaptureAsync()
    {
        _mediaCapture = new MediaCapture();
        // 初始化配置,这里用默认设置即可,也可以自定义分辨率等
        await _mediaCapture.InitializeAsync();
        // 如果需要预览,可以把画面绑定到UI上的CaptureElement控件
        // captureElementControl.Source = _mediaCapture;
        // await _mediaCapture.StartPreviewAsync();
    }
    
    // 拍照并保存到文件的方法
    private async Task<StorageFile> TakePhotoAsync()
    {
        if (_mediaCapture == null)
        {
            await InitializeMediaCaptureAsync();
        }
        // 在图片库创建唯一命名的照片文件
        var capturedFile = await KnownFolders.PicturesLibrary.CreateFileAsync(
            "MyCapturedPhoto.jpg", 
            CreationCollisionOption.GenerateUniqueName
        );
        // 设置照片编码格式为JPEG
        var imageProps = ImageEncodingProperties.CreateJpeg();
        // 执行拍照并保存
        await _mediaCapture.CapturePhotoToStorageFileAsync(imageProps, capturedFile);
        return capturedFile;
    }
    

    这种方式完全由你掌控拍摄的全流程,不会触发任何系统自带的编辑弹窗,唯一的小缺点是需要自己处理预览、权限(比如相机权限、存储权限)这些细节,但胜在稳定可控。

  • 针对Windows 10旧版本做特殊处理
    这个编辑弹窗的问题主要集中在Windows 10 2004之前的旧版本系统上,你可以在代码里先判断系统版本,如果是旧版本,直接切换到MediaCapture方案,新版本则可以继续用CameraCaptureUI。判断系统版本的代码片段:

    var osVersionStr = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamilyVersion;
    if (ulong.TryParse(osVersionStr, out ulong osVersion))
    {
        ushort majorVersion = (ushort)((osVersion & 0xFFFF000000000000) >> 48);
        ushort minorVersion = (ushort)((osVersion & 0x0000FFFF00000000) >> 32);
        // Windows 10 2004对应的版本号是10.0.19041,minorVersion为2004
        if (majorVersion == 10 && minorVersion < 2004)
        {
            // 旧版本系统,使用MediaCapture拍照
        }
        else
        {
            // 新版本系统,可继续使用CameraCaptureUI
        }
    }
    

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:43:07