将字节数组转换为图像异常

本文关键字:图像 异常 转换 数组 字节 字节数 | 更新日期: 2023-09-27 18:17:19

我正在使用以下内容将来自网络流的传入字节数组数据转换为要在屏幕上显示的图像,但经过一段时间的运行后,我一直得到异常"没有找到适合完成此操作的成像组件",内部异常"组件找不到。(Exception from HRESULT: 0x88982F50)"。我看过缓冲大小的问题,但我不认为这是它。任何想法吗?

public static ImageSource ByteToImage(byte[] imageData)
    {
        BitmapImage biImg = new BitmapImage();
        MemoryStream ms = new MemoryStream(imageData);
        try
        {
            biImg.BeginInit();
            biImg.StreamSource = ms;
            biImg.EndInit();
        }
        catch ( Exception e)
        {
            MessageBox.Show("1"+ e.InnerException);
        }
        ImageSource imgSrc = biImg as ImageSource;
        return imgSrc;
    }
<<p> 附加信息/strong>

这是我在接收网络流的HandlerThread中使用的;

NetworkStream networkStream = new NetworkStream(handlerSocket);
            int thisRead = 0;
            int blockSize = 256000;
            Byte[] dataByte = new Byte[blockSize];
            lock (this)
            {
                while (running)
                {
                    thisRead = networkStream.Read(dataByte, 0, blockSize);
                    Dispatcher.BeginInvoke(new ThreadStart(delegate 
       { pictureBox1.Source = ByteToImage(dataByte); }));
                    if (thisRead == 0) break;
                }
            }

将字节数组转换为图像异常

临时解决方案(我知道这不是好的编程),但简单地在catch块中不做任何事情将允许我绕过错误并继续运行。在我找到更好的解决办法之前,暂时这样做。

您将流分成256kB(略小于256kiB)的块,我假设这是任意选择的大小,但是您假设每个块恰好包含一个图像。当这个假设被打破时(可能总是如此),你的代码就会中断。

为什么不直接用StreamSource = networkStream;