【问题标题】:Exception Converting Byte Array to Image将字节数组转换为图像的异常
【发布时间】:2013-06-06 17:11:30
【问题描述】:

我正在使用以下内容将来自网络流的传入字节数组数据转换为要在屏幕上显示的图像,但在运行正常一段时间后,我不断收到异常“找不到适合完成此操作的成像组件”。内部异常为“找不到组件。(来自 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;
    }

其他信息

这是我在接收网络流的 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;
                }
            }

【问题讨论】:

  • 你确定字节是正确的吗?尝试将它们写入磁盘并检查是否可以使用图像编辑器打开文件。
  • 您的字节数组包含标题? (.bmp、.jpg 等)还是原始数据?
  • 你在调试这个以确定异常发生在哪一行?
  • @DonBoitnott 和严重这很难,因为它可以工作一段时间,所以我无法确定我想在没有 F5 的情况下在该方法中调试的时间,并且真的不想打开保存到磁盘的每个图像。 Nic007 原始字节[] 我很确定。
  • @killianmcc 这可能已经解决了:stackoverflow.com/questions/9724876/…

标签: c# image bytearray


【解决方案1】:

临时解决方案(我知道这不是很好的编程),但只要在 catch 块中什么都不做就可以让我绕过错误并继续运行。暂时会做,直到我得到更好的解决方案。

【讨论】:

    【解决方案2】:

    您将流分成 256kB(略小于 256kiB)的块,我认为这是任意选择的大小,但随后您假设每个块只包含一个图像。当该假设(可能总是)中断时,您的代码就会中断。

    你为什么不直接使用StreamSource = networkStream;

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 1970-01-01
      • 2015-08-16
      • 2013-05-19
      • 2013-01-14
      • 2013-07-29
      相关资源
      最近更新 更多