camera - 通过 C++/WinRT 使用相机
问题描述
我想在 C++/WinRT 中使用相机(CameraCaptureUI 或 MediaCapture 类)。
Microsoft 文档示例代码由 C# 和 JavaScript 编写。
https://docs.microsoft.com/en-us/uwp/api/Windows.Media.Capture.CameraCaptureUI#code-snippet-1
MFC + C++/WinRT
void CWinRTtestDlg::OnBnClickedButtonToast()
{
// show toast
auto notificationManager = ToastNotificationManager::GetDefault();
auto toastXml = ToastNotificationManager::GetTemplateContent(ToastTemplateType::ToastText01);
auto textNode = toastXml.GetElementsByTagName(L"text").Item(0);
textNode.AppendChild(toastXml.CreateTextNode(L"Hello C++/WinRT!"));
auto toast = ToastNotification(toastXml);
toast.ExpirationTime(winrt::clock::now() + std::chrono::hours() * 2);
notificationManager.CreateToastNotifier().Show(toast);
}
此代码正在运行。
IAsyncAction Camera()
{
auto cameraManager = CameraCaptureUI();
cameraManager.PhotoSettings().CroppedAspectRatio(Size(4, 3));
cameraManager.PhotoSettings().Format(CameraCaptureUIPhotoFormat::Jpeg);
auto file{ co_await cameraManager.CaptureFileAsync(CameraCaptureUIMode::Photo) };
}
void CWinRTtestDlg::OnBnClickedButtonCamera()
{
winrt::init_apartment();
auto image = Camera();
}
但这段代码不起作用......
C++ 项目设置
Additional Option /await
C++ Language Standard C++17
Conformance mode否
解决方案
团队正在慢慢添加 C++ 示例,但这需要时间。在大多数情况下,音译应该不会太难。如果它是 C# 构造函数,请将其替换为 C++ 构造函数。例如:
Widget widget = new Widget(123);
变成:
Widget widget(123);
C++ 中不存在属性,因此您只需添加括号并将其视为方法即可。您还可以使用协程,因此await
C# 中的 a 变成co_await
C++ 中的 a。
推荐阅读
- amazon-web-services - VSCode launch.json 无法启动本地 API 网关:等待命令时超时:“sam local start-api”
- python - 使用 eval 和 exec 访问模块之外的东西
- firebase - Flutter 用户创建和登录
- html - 在网格之后添加内容
- database - 在 MongoDB 中实现一个灵活的模式类型列表?
- c++ - zlib 可以在不压缩文件其余部分的情况下删除填充吗?
- deep-learning - 深度学习、NLP、Valuenet:TypeError:字符串索引必须是整数
- css - 基于 Flexbox 百分比的跨度“过度使用”有间隙的可用空间
- python - SpyderKernelApp 警告 | 没有这样的通信:f13ea39fb8bd11ebba185ccd5b5a1f5d 尝试在 Python 中将 CSV 文件转换为 Parquet 文件时
- c++ - 关于变量的C++问题:在字符串中添加一个整数