1

我有这个函数将图像转换为字节数组。

  public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.MemoryBmp);
        return ms.ToArray();
    }

这是我调用该函数的代码。

  private void btn_Click(object sender, EventArgs e)
    {
       inputPath=textbox1.text;

        try
        {
            System.Drawing.Image img = Image.FromFile(inputPath);
           byte[] str= imageToByteArray(img);
         }


     catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

当我运行程序或触发事件时,它会抛出一个异常,上面写着“内存不足” - 为什么会发生这种情况?

我正在使用这个函数来解码 .jls 图像(使用 JPEG-LS 算法压缩的图像)。所以这显然意味着该文件不受支持,对吧?你知道还有其他选择吗?

4

3 回答 3

4

来自MSDN

如果文件没有有效的图像格式或 GDI+ 不支持文件的像素格式,则此方法将引发 OutOfMemoryException 异常。

此外:

Image 类不支持位图中的 alpha 透明度。要启用 Alpha 透明度,请使用每像素 32 位的 PNG 图像。

有关支持的格式的更多信息,请参见此处

于 2012-10-17T05:39:20.617 回答
1

试试这个图像到字节[]:

 byte[] str = File.ReadAllBytes("InputImagePath");

private void btn_Click(object sender, EventArgs e)  
    {  
       inputPath=textbox1.text;  

        try  
        {  
          byte[] str= File.ReadAllBytes("inputPath");
        }  


     catch (Exception ex)  
        {  
            MessageBox.Show(ex.Message);  
        }  
    }  
于 2012-10-17T05:45:26.687 回答
0

Out of Memory 异常非常不言自明。

你可以试试以下

  • 尝试不同大小的图像,并观察系统在哪个大小范围内开始出现内存不足异常
  • 尝试处置你的MemoryStream

例子

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
    using(MemoryStream ms = new MemoryStream()) 
    {
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.MemoryBmp);
        return ms.ToArray();
    }
}
于 2012-10-17T05:39:35.740 回答