Добавьте ImageSource с SharpAvi - PullRequest
       0

Добавьте ImageSource с SharpAvi

0 голосов
/ 25 августа 2018

Я использую SharpAvi и хочу добавить изображение. У меня есть ImageSource в байтах, и я не могу записать изображение в поток. Я получаю это исключение:

"System.ArgumentException: 'Размер буфера недостаточен.'"

В документации, которую я читаю, мне нужно написать DIB. Как преобразовать ImageSource в Windows DIB?

//I convert canvas to Imagesource bytes
byte[] canvasdata = CanvasWriter.SaveCanvasToImgSimulate(canvas, (int)canvas.Width, (int)canvas.Height);

var writer = new AviWriter("test.avi")
{
    FramesPerSecond = 30,
    // Emitting AVI v1 index in addition to OpenDML index (AVI v2)
    // improves compatibility with some software, including 
    // standard Windows programs like Media Player and File Explorer
    EmitIndex1 = true
};

var stream  = writer.AddMotionJpegVideoStream((int)data.CanvasW, (int)data.CanvasH, 70);

stream.WriteFrame(true, canvasdata, 0, canvasdata.Length);

writer.Close();

1 Ответ

0 голосов
/ 27 августа 2018

Я решил проблему с помощью этой функции:

    private byte[] BitmapSourceToArray(BitmapSource bitmapSource)
    {
        // Stride = (width) x (bytes per pixel)
        int stride = (int)bitmapSource.PixelWidth * (bitmapSource.Format.BitsPerPixel / 8);
        byte[] pixels = new byte[(int)bitmapSource.PixelHeight * stride];

        bitmapSource.CopyPixels(pixels, stride, 0);

        return pixels;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...