using (MemoryStream ms = new MemoryStream(byteSource))
{
var img = (Bitmap)Image.FromStream(ms);
}
我收到参数无效错误。我的问题是:byteSource是什么问题?我的意思是,它可以是一个任意的字节数组吗?或者它必须已经是图像格式?如果我要在长度限制内传递函数数组,比如0xff或0x00或其他什么,这有关系吗?我正在尝试诊断参数无效错误的原因。
答案 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流没有有效图像格式