C# System.OverflowException:&x27;算术运算导致溢出;
我创建了.NET核心控制台应用程序,并添加了对C# System.OverflowException:&x27;算术运算导致溢出;,c#,.net-core,system.drawing.common,C#,.net Core,System.drawing.common,我创建了.NET核心控制台应用程序,并添加了对System.Drawing.Commonnuget的引用。 我正在尝试从运行以下代码,但在bitmap1.GetEncoderParameterList和System.OverflowException上失败: '算术运算导致溢出。' 这个代码有什么问题?我做了什么违法的事吗 class Program { public static void Main(string[] args) { new Program().Get
System.Drawing.Common
nuget的引用。
我正在尝试从运行以下代码,但在bitmap1.GetEncoderParameterList
和System.OverflowException上失败:
'算术运算导致溢出。'
这个代码有什么问题?我做了什么违法的事吗
class Program
{
public static void Main(string[] args)
{
new Program().GetSupportedParameters();
}
private void GetSupportedParameters()
{
Bitmap bitmap1 = new Bitmap(1, 1);
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
//this one also does not work:
//Bitmap bitmap1 = new Bitmap(Image.FromFile(@"C:\temp\0\2.png"));
//ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Png);
EncoderParameters paramList = bitmap1.GetEncoderParameterList(jpgEncoder.Clsid);
EncoderParameter[] encParams = paramList.Param;
StringBuilder paramInfo = new StringBuilder();
for (int i = 0; i < encParams.Length; i++)
{
paramInfo.Append("Param " + i + " holds " + encParams[i].NumberOfValues +
" items of type " +
encParams[i].ValueType + "\r\n" + "Guid category: " + encParams[i].Encoder.Guid + "\r\n");
}
}
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
}
更新
这一个也崩溃了:
Bitmap bitmap1 = new Bitmap(Image.FromFile(@"C:\temp\0\2.png"));
ImageCodecInfo pngEncoder = GetEncoder(ImageFormat.Png);
编辑:看起来它在.NETFramework上运行得很好,它在.NETCore2.1中作为OP抛出了一个异常
EDIT2:这似乎是一个已知问题,如下所示:这是.NET Core中的一个错误,正在为.NET Core 5.0解决:请参见。我猜您尝试加载的图像已损坏,或者不是图像,或者是不支持的格式。根据经验,,NET中的图像加载代码在这种错误处理方面相当短,因此它可能只是试图为一个TB大小的图像构造内存,因为它从文件中获得了非常高的宽度和高度值,并在计算过程中计算出分配溢出总量的内存。@LasseVågsætherKarlsen I尝试了另一个位图,相同的故事位图bitmap1=新位图(Image.FromFile(@“C:\temp\0\2.png”);ImageCodecInfo-jpgEncoder=GetEncoder(ImageFormat.Png)@LasseVågsætherKarlsen不,对于png,我使用了pngdecoder。我不知道它与windows窗体有什么关系,除了从一个问题的标签上,但不管你是在windows窗体上还是在其他任何地方调用该方法。从我的角度来看,似乎只是缺少microsoft针对.net core的最新文档。感谢您的确认,我在corefx repo中创建了错误。您引用的bug与文档相关。但我的示例与代码相关,而不是文档。这种情况不应该发生。我仍然不理解您答案的这一部分:您调用的方法GetSupporterParameters是错误的。这并不是真的错。你可以让所有的方法都是静态的,也可以像我一样。我的方法并不要求所有方法都是静态的。我在Windows10上的.NETFramework4.8(新型WPF项目)中遇到了同样的错误。
Bitmap bitmap1 = new Bitmap(Image.FromFile(@"C:\temp\0\2.png"));
ImageCodecInfo pngEncoder = GetEncoder(ImageFormat.Png);