使用System.Drawing.Image.FromStream时出错

时间:2012-09-05 16:57:32

标签: c# image exception-handling system.drawing

using (MemoryStream ms = new MemoryStream(byteSource))
{
    var img = (Bitmap)Image.FromStream(ms);
}

我收到参数无效错误。我的问题是:byteSource是什么问题?我的意思是,它可以是一个任意的字节数组吗?或者它必须已经是图像格式?如果我要在长度限制内传递函数数组,比如0xff或0x00或其他什么,这有关系吗?我正在尝试诊断参数无效错误的原因。

3 个答案:

答案 0 :(得分:1)

是的,字节流需要采用有效的图像格式,即。 .png,jpg或类似文件。你在哪里有byteSource?如果它是一个像素值数组,则需要创建一个新的位图,然后使用LockBits获取一个可以以正确格式复制字节的数组。

如果您正在寻找,那么这是一个用噪音填充100x100图像的示例:

Bitmap b = new Bitmap(100,100);
var bits = b.LockBits(new Rectangle(0,0,100,100), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Random rand = new Random();
var pixels = Enumerable.Range(1, 100*100).Select(n => rand.Next()).ToArray();
Marshal.Copy(pixels, 0, bits.Scan0, 100*100);
b.UnlockBits(bits);
// use the image ...
b.Save("D:\\test.png", ImageFormat.Png);

这假设你的像素来源是32bppArgb,但是你可以传递给LockBits的其他格式选项。

答案 1 :(得分:1)

您可以阅读MSDN page

  

参数

     

stream类型:System.IO.Stream包含此数据的Stream   图像。

所以是的,字节数组必须是图像 有关该页面的更多信息:

  

例外:
  ArgumentException:流没有有效的图像   格式

答案 2 :(得分:0)

请查看MSDN文档以获取相关信息Image.FromStream Method (Stream)

  

ArgumentException流没有有效图像格式