相当小的位图返回无效参数

时间:2014-02-14 22:33:09

标签: c# winforms bitmap resolution

编辑 - 已解决?

重新启动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

1 个答案:

答案 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;

我希望这能解决你的问题。 :)