问题描述
我在 WPF 应用程序中使用 Media Foundation 来实现类似于 Windows 相机应用程序的功能:显示实时网络摄像头源并在按下按钮时拍摄高分辨率图像。虽然 Windows 相机应用程序总是拍摄正确曝光的快照,但 Media Foundation 拍摄的快照经常曝光过度。
该应用程序仅用于内置高分辨率照片的设备(例如 Surface Go 2、Surface 7 Pro 等)。使用特定的图像流来拍摄快照,而不是读取视频流的一帧。
我已经尝试在拍摄快照之前更改 IAMCameraControl 和 IAMVideoProcAmp 属性,例如曝光 或亮度,但是照片总是曝光过度。
是否有任何其他设置或方法可以在拍摄高分辨率快照时修复过度曝光(例如,与 Windows 相机应用程序的工作方式相同)?
过度曝光的快照
照片的高分辨率
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 (将#修改为@)