ビデオ処理を含む Windows 8 アプリケーションを構築しています。現在、.mp4 ビデオ クリップからフレームを BitmapImage として抽出することに固執しています。オンラインで見た 2 つの例はhereとhereですが、BitmapDecoder を作成しようとすると例外が発生します。これまでに取得したコードを以下に貼り付けましたが、何をしているのかわかりません。
public async void Extract_Image_From_Video(StorageFile video_file)
{
// Create image
BitmapImage image = new BitmapImage();
// Open the video file as a stream
IRandomAccessStream readStream = await video_file.OpenAsync(FileAccessMode.Read);
// Breaks here
BitmapDecoder bmpDecoder = await BitmapDecoder.CreateAsync(readStream);
BitmapFrame frame = await bmpDecoder.GetFrameAsync(0);
BitmapTransform bmpTrans = new BitmapTransform();
bmpTrans.InterpolationMode = BitmapInterpolationMode.Cubic;
PixelDataProvider pixelDataProvider = await frame.GetPixelDataAsync(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Ignore, bmpTrans, ExifOrientationMode.RespectExifOrientation, ColorManagementMode.ColorManageToSRgb);
byte[] pixelData = pixelDataProvider.DetachPixelData();
InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
BitmapEncoder enc = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ras);
// write the pixel data to our stream
enc.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Ignore, 200, 200, bmpDecoder.DpiX, bmpDecoder.DpiY, pixelData);
await enc.FlushAsync();
// this is critical and below does not work without it!
ras.Seek(0);
// Set to the image
image.SetSource(ras);
// PreviewImage is an image control defined in the xaml
PreviewImage.Source = gridImage;
}