30 c# image stream argumentexception
为什么我的代码中出现"参数无效"异常:
MemoryStream ms = new MemoryStream(byteArrayIn);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
Run Code Online (Sandbox Code Playgroud)
长度byteArrayIn是169014.尽管事实上它没有大于255的值,但我得到了这个例外.
Seb*_*ian 18
我有同样的问题,显然现在解决了,尽管这和其他一些gdi +异常非常误导,我发现实际问题是发送到Bitmap构造函数的参数无效.我有这个代码:
using (System.IO.FileStream fs = new System.IO.FileStream(inputImage, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite))
{
try
{
using (Bitmap bitmap = (Bitmap)Image.FromStream(fs, true, false))
{
try
{
bitmap.Save(OutputImage + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
GC.Collect();
}
catch (Exception ex)
{
throw ex;
}
}
}
catch (ArgumentException aex)
{
throw new Exception("The file received from the Map Server is not a valid jpeg image", aex);
}
}
Run Code Online (Sandbox Code Playgroud)
以下行导致错误:
Bitmap bitmap = (Bitmap)Image.FromStream(fs, true, false)
Run Code Online (Sandbox Code Playgroud)
文件流是从从Map Server下载的文件构建的.我的应用程序错误地发送请求以获取图像,并且服务器返回了jpg扩展名的内容,但实际上是一个html告诉我发生了错误.所以我正在拍摄该图像并试图用它构建一个Bitmap.修复是控制/验证图像的有效jpeg图像.
希望能帮助到你!
Jon*_*eet 15
我的猜测是byteArrayIn不包含有效的图像数据.
请提供更多信息:
byteArrayIn的,你确定它应该包含有效的图像吗?小智 7
抛出的“参数无效”异常Image.FromStream()告诉您该流不是“有效”或“可识别”格式。观察内存流,特别是当您从文件中获取各种字节偏移量时。
// 1. Create a junk memory stream, pass it to Image.FromStream and
// get the "parameter is not valid":
MemoryStream ms = new MemoryStream(new Byte[] {0x00, 0x01, 0x02});
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);`
// 2. Create a junk memory stream, pass it to Image.FromStream
// without verification:
MemoryStream ms = new MemoryStream(new Byte[] {0x00, 0x01, 0x02});
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms, false, true);
Run Code Online (Sandbox Code Playgroud)
示例 2 将起作用,请注意 useEmbeddedColorManagement 必须为 false 才能使 validateImageData 有效。
通过将内存流转储到文件并检查内容可能是最简单的调试方法。
byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}
ImageConverter imageConverter = new System.Drawing.ImageConverter();
System.Drawing.Image image = imageConverter.ConvertFrom(fileData) as System.Drawing.Image;
image.Save(imageFullPath, System.Drawing.Imaging.ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
哪一行抛出异常?这new MemoryStream(...)?或者Image.FromStream(...)?什么是byteArrayIn?是一个吗byte[]?我只是因为评论“并且其中的任何值都不大于 255”而问 - 这当然对于byte[].
一个更明显的问题是:二进制文件实际上包含合理格式的图像吗?
例如,以下代码(虽然不是很好的代码)可以正常工作:
byte[] data = File.ReadAllBytes(@"d:\extn.png"); // not a good idea...
MemoryStream ms = new MemoryStream(data);
Image img = Image.FromStream(ms);
Console.WriteLine(img.Width);
Console.WriteLine(img.Height);
Run Code Online (Sandbox Code Playgroud)