"Parameter must be positive and < Height. Parameter name: y"错误



我正在为Grasshopper 3D开发一个组件,这是一个Rhino(架构)插件。

使用Render()方法,可以在画布上绘制热图图像。隔离我的其他方法和构造函数,我非常相信这个方法导致了我的问题。

protected override void Render(Grasshopper.GUI.Canvas.GH_Canvas canvas, Graphics graphics, Grasshopper.GUI.Canvas.GH_CanvasChannel channel) {
// Render the default component.
base.Render(canvas, graphics, channel);
// Now render our bitmap if it exists.
if (channel == Grasshopper.GUI.Canvas.GH_CanvasChannel.Wires) {
KT_HeatmapComponent comp = Owner as KT_HeatmapComponent;
if (comp == null)
return;
List<HeatMap> maps = comp.CachedHeatmaps;
if (maps == null)
return;
if (maps.Count == 0)
return;
int x = Convert.ToInt32(Bounds.X + Bounds.Width / 2);
int y = Convert.ToInt32(Bounds.Bottom + 10);
for (int i = 0; i < maps.Count; i++) {
Bitmap image = maps[i].Image;
if (image == null)
continue;
Rectangle mapBounds = new Rectangle(x, y, maps[i].Width * 10, maps[i].Height * 10);
mapBounds.X -= mapBounds.Width / 2;
Rectangle edgeBounds = mapBounds;
edgeBounds.Inflate(4, 4);
GH_Capsule capsule = GH_Capsule.CreateCapsule(edgeBounds, GH_Palette.Normal);
capsule.Render(graphics, Selected, false, false);
capsule.Dispose();
// Unnecessary graphics.xxxxxx methods and parameters
y = edgeBounds.Bottom + 10;
}
}
}

当我试图将东西渲染到画布上时,我收到的错误是:

1. Solution exception:Parameter must be positive and < Height.
Parameter name: y

根据我的研究,当遇到数组溢出时,这种情况似乎发生得最多。

我的研究链接:

  1. http://www.codeproject.com/Questions/158055/Help-in-subtraction-of-two-images

  2. 通过像素BMP C#时出现异常

  3. http://www.c-sharpcorner.com/Forums/Thread/64792/

然而,上面的例子主要适用于多维数组,而我有一个一维数组。

我想知道是否有其他人以前也遇到过这个问题,可以给我一些建议和指导吗?

谢谢。

int x = Convert.ToInt32(Bounds.X + Bounds.Width / 2);
int y = Convert.ToInt32(Bounds.Bottom + 10);

您的错误是告诉您y必须小于高度,但您将其设置为比您的高度高10,因为您要添加到Bounds.Bottom

maps[i].Height * 10

你还需要确保你计算的Height是你认为的,并将y与之进行比较

在编写插件(VS扩展)时,可以在不更改代码的情况下解决此问题。我找不到任何例子来说明我将在这里回答关于这个特定问题的任何其他评论。

以下是我今天收到的一些构建输出:

>C:Program Files (x86)Microsoft Visual Studio2019ProfessionalMSBuildMicrosoftVisualStudiov16.0VSSDKMicrosoft.VisualStudio.Sdk.Common.targets(68,5): error : Parameter must be positive and < Height.
>C:Program Files (x86)Microsoft Visual Studio2019ProfessionalMSBuildMicrosoftVisualStudiov16.0VSSDKMicrosoft.VisualStudio.Sdk.Common.targets(68,5): error : Parameter name: y
========== Build: 8 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

并且CCD_ 6文件是未修改的。在通常的源代码中没有任何文件可以像许多在线答案所暗示的那样做任何图形化的事情

那么,我做了什么改变才有了这样的开始呢?

首先,我更新了一个VS扩展,并将一些图像文件添加到包含项目的图标文件夹中,以便能够在自定义菜单中使用它们。

为了做到这一点,我在VSCT文件中正确地进行了所需的更改,这样这些图像中的一些将在运行时与自定义菜单项一起显示。

但是上面的构建错误不断地被喷出来。

我的原始图像以相当大的尺寸作为SVG文件提供给我。我使用Gimp调整了它们的大小,并将它们导出为PNG格式。(这一点很重要,稍后将披露)。

为了调试,我注释掉了VSCT文件中的更改,直到扩展插件再次正确构建。

然后,我从<GuidSymbol>条目开始,一个接一个地重新介绍我的更改,直到构建因相同的问题而失败。

当取消注释其中一个<Bitmap>条目时,生成再次失败。然后,我将该条目的文件名更改为扩展名中其他地方使用的已知"良好"图像文件。瞧!它再次构建:)

因此,我得出结论,图像文件一定出了问题。

所以我回到Gimp,加载了大的SVG,调整了图像的大小,并第二次重新导出为16x16 PNG。同样的问题依然存在。

所以我回到Gimp,加载了大的SVG,调整了图像的大小,并注意到还有一个选项";调整画布大小"我用这个来确保它是预期的16x16大小,然后第三次重新导出为PNG格式。

这一次,当在VS扩展中引用映像时,映像是正常的,并且允许成功构建。

因此,如果你发现自己没有像网上所有其他答案所建议的那样做出任何改变,并且你正在编写/更新VS扩展,那么问题很可能是你在项目中介绍的一个或多个图像。我使用了Gimp,我认为其他一些图像编辑器也会在PNG中嵌入数据,这可能是MS Build工具无法接受的。在我的特定情况下,当VSCT引用图像文件时,"图像"大小和"画布"大小都必须为16x16才能成功构建。

相关内容

最新更新