微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Media Foundation 修复曝光过度的高分辨率照片?

如何解决如何使用 Media Foundation 修复曝光过度的高分辨率照片?

我在 WPF 应用程序中使用 Media Foundation 来实现类似于 Windows 相机应用程序的功能显示实时网络摄像头源并在按下按钮时拍摄高分辨率图像。虽然 Windows 相机应用程序总是拍摄正确曝光的快照,但 Media Foundation 拍摄的快照经常曝光过度。

该应用程序仅用于内置高分辨率照片的设备(例如 Surface Go 2、Surface 7 Pro 等)。使用特定的图像流来拍摄快照,而不是读取视频流的一帧。

我已经尝试在拍摄快照之前更改 IAMCameraControlIAMVideoProcAmp 属性,例如曝光亮度,但是照片总是曝光过度。

是否有任何其他设置或方法可以在拍摄高分辨率快照时修复过度曝光(例如,与 Windows 相机应用程序的工作方式相同)?

过度曝光的快照

Overexposed snapshot

照片的高分辨率

Photo resolution

获取快照的代码

IMFCaptureEngineClassFactory captureEngineClassFactory = null;
IMFCaptureEngine captureEngine = null;
IMFCapturePhotoSink capturePhotoSink = null;
IMFMediaType photoMediaType = null;
try
{
    // Create a CaptureEngineClassFactory
    captureEngineClassFactory = mff.GetCaptureEngineClassFactory();

    // Create a CaptureEngine
    captureEngine = mff.GetCaptureEngine(captureEngineClassFactory);

    // Initialize the CaptureEngine
    MFCaptureEngineOnEventCallback captureEngineOnEventCallback = MFCaptureEngineOnEventCallback.GetInstance();
    mff.Initialize(captureEngine,captureEngineOnEventCallback,mediaSource);
    captureEngineOnEventCallback.WaitUntilInitialized();

    // Create a Photo Sink
    capturePhotoSink = mff.CreateCapturePhotoSink(captureEngine);

    // Create a Photo Media Type
    photoMediaType = CreatePhotoMediaType(mediaType);

    // Remove all streams
    mff.RemoveAllStreams(capturePhotoSink);

    // Add Stream
    int sinkStreamIndex = mff.AddStream(capturePhotoSink,streamIndex,photoMediaType);

    // Set output filename
    mff.SetSampleCallback(capturePhotoSink,this);

    // Take photo
    mff.TakePhoto(captureEngine);
    captureEngineOnEventCallback.WaitUntilDone();

    // imageSource should be filled in after executing TakePhoto
    return image;
}
finally
{
    TryRelease(captureEngineClassFactory);
    TryRelease(captureEngine);
    TryRelease(capturePhotoSink);
    TryRelease(photoMediaType);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。