调用ImageConverter.ConvertFrom(file.InputStream)报“参数无效”的原因咨询
问题:ImageConverter.ConvertFrom(file.InputStream) 抛出“Parameter is not valid”错误
原始报错代码
using (var image = (Image)converter.ConvertFrom(file.InputStream)) //此处报错 { //适配全高清1920×1080 ResizeImage(image, 1440, 900, 70, fullPath); }
运行时提示错误:Parameter is not valid(参数无效)
修改后的可运行代码
System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter(); using(MemoryStream memoryStream = new MemoryStream()) { file.InputStream.CopyTo(memoryStream); using (var image = (Image)converter.ConvertFrom(memoryStream.ToArray())) { //适配全高清1920×1080 ResizeImage(image, 1440, 900, 70, fullPath); } }
原因解析
- 流的位置问题:
file.InputStream这类流的当前读写位置可能不是起始点(比如之前被其他操作读取过),而ImageConverter.ConvertFrom需要从流的起始位置读取完整的图片数据,位置不对就会解析失败,抛出参数无效错误。 - 流的访问限制:部分输入流(比如网络下载的文件流、Web请求中的文件流)存在只读或单次读取的限制,直接传入转换器时,可能因为流无法被完整读取或读取过程中权限/状态变化导致失败。
- 内存字节数组的稳定性:把流数据复制到MemoryStream再转为字节数组,相当于把图片的完整二进制数据缓存到内存里,形成一个独立、可重复读取的数据源,完全规避了原始流的位置、访问权限或生命周期问题,转换器能稳定解析出图片对象。
内容的提问来源于stack exchange,提问作者K V Sharma
相关产品推荐
相关产品推荐

