从相机捕获添加文本到图像

时间:2014-11-19 04:23:17

标签: c# windows-store-apps windows-8.1

我正在尝试创建一个可以从平板电脑摄像头捕获图像的metro应用程序。 但是在捕获时我想在图像上叠加日期戳。

/// <summary>
    /// This is the click handler for the 'CaptureButton' button.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private async void CapturePhoto_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            rootPage.NotifyUser("", NotifyType.StatusMessage);

            // Using Windows.Media.Capture.CameraCaptureUI API to capture a photo
            CameraCaptureUI dialog = new CameraCaptureUI();
            Size aspectRatio = new Size(16, 9);
            dialog.PhotoSettings.CroppedAspectRatio = aspectRatio;

            StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo);
            if (file != null)
            {
                BitmapImage bitmapImage = new BitmapImage();
                using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read))
                {
                    bitmapImage.SetSource(fileStream);
                }

                // add code for text overlay here


                CapturedPhoto.Source = bitmapImage;
                ResetButton.Visibility = Visibility.Visible;

                // Store the file path in Application Data
                appSettings[photoKey] = file.Path;
            }
            else
            {
                rootPage.NotifyUser("No photo captured.", NotifyType.StatusMessage);
            }
        }
        catch (Exception ex)
        {
            rootPage.NotifyUser(ex.Message, NotifyType.ErrorMessage);
        }
    }

通常在图像上添加文字我会使用。

Graphics g = Graphics.FromImage

然而,似乎System.Drawing已经消失了。我还可以使用什么来覆盖捕获图像上的文本?

1 个答案:

答案 0 :(得分:0)

Windows.UI.Xaml没有直接的光栅图形API。您可以从WriteableBitmap或BitmapDecoder获取原始像素,但是没有高级方法可以在其上绘制它们。

有几种方法可以在图像上绘制文字:

  1. 与DirectWrite互操作并传入位图进行操作。
  2. 找到将直接在您的像素上绘制的第三方库 缓冲区(我不确定是否有任何可以做到这一点:一般绘制很多 人们使用WriteableBitmapEx,但我不相信它可以做文本 Windows运行时应用程序。另请查看WinRTXamlToolkit)
  3. 使用Image控件和TextBlock中的位图创建一个Grid 使用您的叠加层然后使用RenderTargetBitmap将Grid渲染到 一个位图。
  4. Win2d旨在将Direct2d公开给Windows应用商店 应用。这是一项正在进行的工作,但目前正在实施文本。 请参阅https://github.com/Microsoft/Win2D
  5. 我从Win2d开始,看看它是否可以满足您的需求。