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