错误:“内存不足”,将.jls图像转换为byte []数组时

时间:2012-10-17 05:34:10

标签: c# image memory image-conversion

我有这个函数将Image转换为Byte数组。

  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算法压缩的图像)。所以这显然意味着文件不受支持,对吧?你还知道其他任何选择吗?

3 个答案:

答案 0 :(得分:4)

来自MSDN

  

如果文件没有有效的图像格式或GDI +没有   支持文件的像素格式,此方法抛出一个   OutOfMemoryException异常。

更多:

  

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

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

答案 1 :(得分:1)

尝试将此图像转换为byte []:

 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);  
        }  
    }  

答案 2 :(得分: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();
    }
}