using (MemoryStream ms = new MemoryStream(byteSource))
{
var img = (Bitmap)Image.FromStream(ms);
}
我收到参数无效错误。我的问题是: byteSource 是什么重要吗?我的意思是,它可以是任意字节数组吗?或者它必须已经是图像格式了?如果我要向函数传递一个数组,比如 0xff、0x00 或其他,在长度限制内,这有关系吗?我正在尝试诊断参数无效错误的原因。
最佳答案
是的,字节流需要采用有效的图像格式,即。 .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。
关于c# - 使用 System.Drawing.Image.FromStream 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286316/