编辑 - 已解决?
重新启动VS后...异常似乎完全消失了。它不会再发生了。 Sooo ......问题解决了吗?我想是吗?
OP
在我的应用程序中,我正在尝试创建一个大小为1366 x 706
的位图。但是,当我尝试将其绘制到我的表单上时,它会返回"parameter is not valid"
异常。
在阅读之后,我了解到参数错误通常意味着C#不会为位图分配足够的内存。但是,1366x706
似乎并不是那么大的分辨率。
在磁盘上,1366x706
图片仅占用2.5MB
。这对于WinForms
来说是否太大了?
修改
代码:
// These variables vary based on the size of the winform, these values return the error
float resizeFactorX = 4.553333f;
float resizeFactorY = 2.353333f;
// The original size of the image is ALWAYS 300x300, that never changes
public static Image resizeImageByFactors(Image i, float resizeFactorX, float resizeFactorY)
{
Bitmap bitmap1 = new Bitmap((int)((float)(i.Width) * resizeFactorX), (int)((float)(i.Height * resizeFactorY)));
using (var gr = Graphics.FromImage(bitmap1))
{
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
gr.DrawImage(i, new Rectangle(Point.Empty, new Size(bitmap1.Width, bitmap1.Height)));
}
return bitmap1;
}
如果您需要更多信息,请随时与我们联系。
编辑2
当调整大小因子不等于1.0时,也会产生错误。
堆栈追踪:
System.ArgumentException: Parameter is not valid.
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
at Paint_Test.Form1.resizeImageByFactors(Image i, Single resizeFactorX, Single resizeFactorY) in c:\Users\ApachePilotMPE\Documents\Visual Studio 2012\Projects\Paint Test\Paint Test\Form1.cs:line 273
答案 0 :(得分:1)
“无论哪种方式,发布的代码都不会产生错误 听众。要么数字不正常,要么你的形象没有 有效。我们看不到的东西。 - LarsTech“
好吧,您的错误似乎与您在此处发布的代码无关。
我认为这与你如何计算XY调整大小因素有关。如果您仍在这样做:
resizeFactorX = (float)(this.ClientSize.Width / 300.0);
如果宽度<1,您将获得0 300 强>!
正如你所说:
“我发现应用程序随时抛出此错误一个位图 大于表单的ClientSize “
这是因为Width是一个int,并且你在int / float除法之后进行转换,结果是int。你必须在分割之前将int转换为浮动。
正确的方式:
resizeFactorX = ((float)this.ClientSize.Width) / 300;
我希望这能解决你的问题。 :)