我目前正在研究将位图渲染到 Grasshopper 画布上的直方图渲染器。一共有两个位图,下面分别解释
private readonly Bitmap _image;
和:
private readonly Bitmap _overlayedImage;
具有名称的Bitmap
实例_image
如下所示:
_位图 http://puu.sh/6mUk4/20b879710a.png
虽然Bitmap
具有名称的实例_overlayedImage
如下所示:
基本上,_overlayedImage
是使用位图创建的_image
位图,顾名思义,它覆盖了文本(您可以在我发布的图像中看到)并为其添加黑色背景。这是它的分配方式
_overlayedImage = overlayBitmap(_image, width * 3, height * 3, times, dates, colors);
(* 3
用于调整图像大小)。
我目前遇到的一个问题是多方面的。
使用这种方法,我可以渲染_image
到画布上。
代码是这样的:
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) {
var 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].overlayedImage;
if (image == null)
continue;
Rectangle mapBounds = new Rectangle(x, y, maps[i].Width, maps[i].Height);
mapBounds.X -= mapBounds.Width / 2;
Rectangle edgeBounds = mapBounds;
GH_Capsule capsule = GH_Capsule.CreateCapsule(edgeBounds, GH_Palette.Normal);
capsule.Render(graphics, Selected, false, false);
capsule.Dispose();
graphics.DrawImage(image, mapBounds);
graphics.DrawRectangle(Pens.Black, mapBounds);
// some graphics interpolation and bicubic methods
y = edgeBounds.Bottom - (mapBounds.Height) - 4;
}
}
}
根据是什么comp.CachedHeatmaps;
:
private readonly List<HeatMap> _maps = new List<HeatMap>();
internal List<HeatMap> CachedHeatmaps {
get { return _maps; }
}
但是,每当我尝试在 上使用Render()
时_overlayedImage
,我都无法这样做。
我已将问题与Render()
方法隔离开来,似乎这条线
Rectangle mapBounds = new Rectangle(x, y, maps[i].Width, maps[i].Height);
是主要问题,asmaps[i].Width
和maps[i].Height
return1
分别100
是图例的尺寸,垂直 100 像素,水平 1 像素。
对于这个相当长的问题,我深表歉意,但我认为我无法以任何其他方式解释它。