从WPFMediaKit捕获byte []图像数据

时间:2013-06-28 15:04:53

标签: c# bitmapdata

我有一些代码,我一直在使用它来从WPFMediaKit的VideoCaptureElement中捕获图像。它很棒!

    bmp.Render(videoElement);
    BitmapEncoder encoder = new JpegBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bmp));
    string now = DateTime.Now.Year + "" + DateTime.Now.Month + "" + DateTime.Now.Day + "" + DateTime.Now.Hour + "" + DateTime.Now.Minute + "" + DateTime.Now.Second;
    string filename = now + "pic.jpg";
    FileStream fstream = new FileStream(filename, FileMode.Open);
    encoder.Save(fstream);
    fstream.Close();

我面临的问题是我现在需要获取byte []数据而不是保存文件。目前我正在使用一个开放的文件框和文件流:

            if (File.Exists(FileLocation))
            {
                //Retreave image from file and binary it to Object image
                using (FileStream stream = File.Open(FileLocation, FileMode.Open))
                {
                    BinaryReader br = new BinaryReader(stream);
                    byte[] data = br.ReadBytes(maxImageSize);
                    image = new Image(dlg.SafeFileName, data, fileSize);
                }
            }

我想做的是采取捕获而不是保存文件,我想把它作为byte []类型。有没有办法将RenderTargetBitmap或BitmapEncoder转换为byre []数组?或者我可能正在考虑将它们转换为内存流,以便二进制阅读器可以使用它?

谢谢!

2 个答案:

答案 0 :(得分:1)

要将BitmapSource转换为字节数组,您可以执行以下操作, 其中bmp是你的BitmapSource或RenderTargetBitmap。

BitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));

byte[] arr = null;
using (MemoryStream memStream = new MemoryStream())
{
    encoder.Save(memStream);
    arr = stream.ToArray();
}

答案 1 :(得分:0)

除了已经提到的以bmp格式保存到流中之外,您还可以在BitmapSource上调用CopyPixels

这将为您提供原始格式的原始像素,没有标题。

请参阅this msdn link