1

我一直在使用一些代码从 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[] 数组?或者我可能正在考虑将它们转换为内存流,以便二进制阅读器可以使用它?

谢谢!

4

2 回答 2

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();
}
于 2013-06-28T15:55:55.323 回答
0

除了已经提到的以 bmp 格式保存到流之外,您还可以调用CopyPixelsBitmapSource。

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

请参阅此 msdn 链接

于 2013-06-28T16:57:29.043 回答