3

ビデオ処理を含む Windows 8 アプリケーションを構築しています。現在、.mp4 ビデオ クリップからフレームを BitmapImage として抽出することに固執しています。オンラインで見た 2 つの例はherehereですが、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;
    }
4

1 に答える 1

1

このために、ac# アプリで使用できる C++ プロジェクトを作成しました。これをチェックしてください

于 2014-06-24T10:46:38.120 に答える