Использование камеры на C ++ / WinRT - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу использовать Camera (CameraCaptureUI или класс MediaCapture) в C ++ / WinRT.

Пример кода документа 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 ++
Дополнительная опция / await
Стандарт языка C ++ C ++ 17
Режим соответствия Нет

1 Ответ

0 голосов
/ 06 февраля 2019

Команды медленно добавляют образцы C ++, но это займет время.По большей части транслитерация не должна быть слишком сложной.Если это конструктор C #, замените его конструктором C ++.Например:

Widget widget = new Widget(123);

Становится:

Widget widget(123);

Свойства не существуют в C ++, поэтому вы можете просто добавить круглые скобки и рассматривать их как метод.Вы также можете использовать сопрограммы, поэтому await в C # становится co_await в C ++.

...