1

我在 Windows Phone 8 中自定义了一个相机应用程序。我需要从相机捕获的每一帧中添加一个水印图像,然后录制到视频中。

我可以使用以下代码自定义预览中的每一帧:

int[] pixelData = new int[(int)(camera.PreviewResolution.Width * camera.PreviewResolution.Height)];

camera.GetPreviewBufferArgb32(pixelData);

返回像素数据;

并将其写回预览。

我的问题是,虽然我可以在用户使用相机录制电影时在屏幕上显示帧,但我找不到 WP8 的工作解决方案来编码帧和音频以保存到文件中。

我已经尝试过 opencv、libav 和其他人但没有成功,如果有人能指出我正确的方向,我将不胜感激。

4

1 回答 1

-2

你可以这样做。

private void GetCameraPicture_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Phone.Tasks.CameraCaptureTask cameraCaptureTask = new Microsoft.Phone.Tasks.CameraCaptureTask();
    cameraCaptureTask.Completed += cct_Completed;
    cameraCaptureTask.Show();
}

try
{
    if (e.TaskResult == Microsoft.Phone.Tasks.TaskResult.OK)
    {
        var imageStream = e.ChosenPhoto;
        var name = e.OriginalFileName;
        using (MemoryStream mem = new MemoryStream())
        {
            TextBlock tb = new TextBlock() { Text = DateTime.Now.ToString("dd MMM yyyy, HH:mm"), Foreground = new SolidColorBrush(Color.FromArgb(128, 0, 0, 0)), FontSize = 40 };
            BitmapImage finalImage = new BitmapImage();
            finalImage.SetSource(imageStream);
            WriteableBitmap wbFinal = new WriteableBitmap(finalImage);
            wbFinal.Render(tb, null);
            wbFinal.Invalidate();
            wbFinal.SaveJpeg(mem, wbFinal.PixelWidth, wbFinal.PixelHeight, 0, 100);
            mem.Seek(0, System.IO.SeekOrigin.Begin);
            MediaLibrary lib = new MediaLibrary();
            lib.SavePictureToCameraRoll("Copy" + name, mem.ToArray());
        }
    }
}
catch (Exception exp) { MessageBox.Show(exp.Message); }

希望它可以帮助你。

于 2013-08-27T12:27:49.360 回答