c# - 使用 System.Drawing.Image.FromStream 时出错

标签 c# image exception system.drawing

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/

相关文章:

jquery - Google Chrome 中不缓存动态加载的图像

c - 如何修复有关 Mandelbrot 集的 Pthreads 代码?

java - 在 NoClassDefFoundError 上的 Try/Catch 中类退出

c# - 输入字符串的格式不正确 C#

c# web api 2传递字典来上传端点

c# - 在 DNX 项目中,我如何定位 Xamarin Android?

java - 此场景中的异常处理

c# - 如何在 C# 中创建右键单击事件处理程序

javascript - laravel 在 javascript 中设置图像源路径错误

Java:迭代 BiMap - 给我带来了一些问题