0

我正在为 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/

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

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

谢谢。

4

1 回答 1

1
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有效值进行比较。

于 2013-12-19T20:11:25.587 回答