通过AudioVideoCaptureDevice创建缩略图

时间:2013-10-05 19:02:56

标签: c# image-processing windows-phone-8

这要么非常复杂,要么我真的很糟糕!!

我正在使用AudioVideoCaptureDevice,我想创建视频的图像缩略图并将其保存到独立存储中。

到目前为止,我所拥有的是以下内容:

    private void SaveThumbnail()
    {
        var w = (int)_videoCaptureDevice.PreviewResolution.Width;
        var h = (int)_videoCaptureDevice.PreviewResolution.Height;

        var argbPx = new int[w * h];

        Deployment.Current.Dispatcher.BeginInvoke(() => _videoCaptureDevice.GetPreviewBufferArgb(argbPx));

        var wb = new WriteableBitmap(w, h);
        argbPx.CopyTo(wb.Pixels, 0);
        wb.Invalidate();

        using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            var fileName = _isoVideoFileName + ".jpg";

            if (isoStore.FileExists(fileName))
                isoStore.DeleteFile(fileName);

            var file = isoStore.CreateFile(fileName);
            wb.SaveJpeg(file, w, h, 0, 20);
            file.Close();
        }
    }

因此GetPreviewBufferArgb()方法用图像数据填充我的int数组(至少说明文档)。我应该如何将这些像​​素保存到Isolatedstorage中,以便稍后加载它们?

以上代码似乎不起作用,因为当我从IsolatedStorage打开图像时它没有打开。

更新:现在我可以保存一些东西 - 不幸的是图像总是黑色的(不 - 我没有在模拟器上测试应用程序)!!

1 个答案:

答案 0 :(得分:4)

让它工作 - 有点连线但似乎整个过程应该在UI线程中完成。

        private void SaveThumbnail()
        {
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                var w = (int)_videoCaptureDevice.PreviewResolution.Width;
                var h = (int)_videoCaptureDevice.PreviewResolution.Height;

                var argbPx = new Int32[w * h];

                _videoCaptureDevice.GetPreviewBufferArgb(argbPx);
                var wb = new WriteableBitmap(w, h);
                argbPx.CopyTo(wb.Pixels, 0);
                wb.Invalidate();

                using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    var fileName = _isoVideoFileName + ".jpg";

                    if (isoStore.FileExists(fileName))
                        isoStore.DeleteFile(fileName);

                    var file = isoStore.CreateFile(fileName);
                    wb.SaveJpeg(file, w, h, 0, 20);
                    file.Close();
                }
            });
        }