Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字节[]转换为位图帧c#_C#_Wpf_Bitmapframe - Fatal编程技术网

如何将字节[]转换为位图帧c#

如何将字节[]转换为位图帧c#,c#,wpf,bitmapframe,C#,Wpf,Bitmapframe,我尝试过这个,但有异常-由于对象的当前状态,操作无效 private BitmapFrame backconvertor(byte[] incomingBuffer) { BitmapImage bmpImage = new BitmapImage(); MemoryStream mystream = new MemoryStream(incomingBuffer); bmpImage.StreamSource = mystream;

我尝试过这个,但有异常-由于对象的当前状态,操作无效

private BitmapFrame backconvertor(byte[] incomingBuffer)
    {
        BitmapImage bmpImage = new BitmapImage();
        MemoryStream mystream = new MemoryStream(incomingBuffer);
        bmpImage.StreamSource = mystream;
        BitmapFrame bf = BitmapFrame.Create(bmpImage);
        return bf;
    }
当我尝试执行此操作时出现错误

return backconvertor(buff); 

在其他函数中(buff-准备就绪!)

文档表明,要初始化映像,需要在
BeginInit
EndInit
之间执行。即:

bmpImage.BeginInit();
bmpImage.StreamSource = mystream;
bmpImage.EndInit();
或者,您可以将流传递给构造函数:

bmpImage = new BitmapImage(mystream);

有关
BeginInit

文档的示例和更多讨论,请参见。文档表明,要初始化映像,需要在
BeginInit
EndInit
之间执行。即:

bmpImage.BeginInit();
bmpImage.StreamSource = mystream;
bmpImage.EndInit();
或者,您可以将流传递给构造函数:

bmpImage = new BitmapImage(mystream);

有关
BeginInit

的示例和更多讨论,请参见。这是我在WPF转换器中拥有的用于处理字节到位图帧的功能,它可以完美地工作:

            var imgBytes = value as byte[];
            if (imgBytes == null)
                return null;
            using (var stream = new MemoryStream(imgBytes))
            {
                return BitmapFrame.Create(stream,
                    BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
            }

它也是线程安全的,就像我在任务中使用它一样。也可以在之前运行。

这是我在WPF转换器中处理字节到位图帧的功能,它工作得非常好:

            var imgBytes = value as byte[];
            if (imgBytes == null)
                return null;
            using (var stream = new MemoryStream(imgBytes))
            {
                return BitmapFrame.Create(stream,
                    BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
            }

它也是线程安全的,就像我在Task.Run之前使用的一样。

哪一行引发异常?BitmapFrame bf=BitmapFrame.Create(bmpImage);看看这里没有。有一个库,我只需要一个函数字节[]->BitmapFrame哪一行引发异常?BitmapFrame bf=BitmapFrame.Create(bmpImage);请看这里否。有一个库,我只需要一个函数字节[]->BitmapFramestill错误((“在bmpImage.EndInit()中未找到此操作的成像组件”); line@curiousity:当然,如果使用
CopyPixels
,该方法不会复制
BitmapImage
所需的任何元信息
BitmapImage
所需的是一个完全编码的流,文件格式为header.still错误((“在bmpImage.EndInit()中未找到此操作的成像组件”); line@curiousity:当然,如果使用
CopyPixels
,则该方法不会复制
BitmapImage
所需的任何元信息
BitmapImage
所需的是具有文件格式标头的完全编码流。