我正在为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
从我的研究中,当遇到阵列溢出时,它似乎发生的最多。
我的研究链接:
http://www.codeproject.com/Questions/158055/Help-in-subtraction-of-two-images
然而,上面的例子主要适用于多维数组,而我有一维。
我想知道其他人是否曾经遇到过这个问题,可以给我一些指导和指导吗?
感谢。
答案 0 :(得分: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
对其进行比较。