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

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

4

3 回答 3

2

正如您在MSDN 页面中所读到的

参数

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

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

异常:
ArgumentException:流没有有效的图像格式

于 2012-09-05T17:00:59.083 回答
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。

于 2012-09-05T16:59:03.673 回答
0

请查看 MSDN 文档以获取相关信息Image.FromStream 方法(流)

ArgumentException 流没有有效的图像格式

于 2012-09-05T17:00:53.193 回答