这要么非常复杂,要么我真的很糟糕!!
我正在使用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打开图像时它没有打开。
更新:现在我可以保存一些东西 - 不幸的是图像总是黑色的(不 - 我没有在模拟器上测试应用程序)!!
答案 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();
}
});
}