我有一个脚本,它返回基于List
Color对象的热图(它们是从名为Grasshopper的图形“编码”软件中的渐变组件派生的RGB值),如下所示: / p>
以下是我的C#热图绘制方法的摘录,该方法返回Bitmap
。
private Bitmap DrawHeatmap(List<Color> colors, int U, int V){
colorHeatmapArray = new Color[colors.Count()];
for(int i = 0; i < colors.Count(); i++){
colorHeatmapArray[i] = colors[i];
}
// Create heatmap image.
Bitmap map = new Bitmap(U, V, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
int x = 0;
int y = 0;
for(int i = 0; i < colors.Count(); i++){
Color color = colorHeatmapArray[i];
map.SetPixel(x, y, color);
y++;
if (y >= map.Height){
y = 0;
x++;
}
if (x >= map.Width){
break;
}
}
return map;
}
我用来保存图像的方法是这样的:
private void saveBMP(){
_heatmap.Save(Path); // Path is just a string declared somewhere
}
_heatmap
是一个实例变量,声明如下:private Bitmap _heatmap;
,我使用Bitmap
方法存储DrawHeatmap()
对象。
我在Grasshopper的“画布”上显示图像的方式依赖于一些特定于Grasshopper的方法,特别是这个片段
RectangleF rec = Component.Attributes.Bounds;
rec.X = rec.Right + 10;
rec.Height = Height;
rec.Width = Width;
canvas.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
canvas.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
canvas.Graphics.DrawImage(_heatmap, GH_Convert.ToRectangle(rec));
canvas.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
canvas.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Default;
canvas.Graphics.DrawRectangle(Pens.Black, GH_Convert.ToRectangle(rec));
但是,当我保存Bitmap
对象时,我得到的结果是我在画布上的版本略高一些,如下所示:
看起来不是很漂亮吗?
我的问题是 - 在调用saveBMP()
方法时,有没有办法操纵Bitmap
来调整尺寸,使其看起来像我在画布上的那样?
答案 0 :(得分:0)
假设_heatmap是从DrawHeatmap方法的输出设置的,那么它的大小应该在该方法的初始化点设置为U乘V像素。一旦保存,请从保存的文件中验证输出文件的大小(即,根据输入DrawHeatmap的U和V的值,它的尺寸是否符合预期?
当您在后面的代码部分中绘制矩形时,您使用的是与之前相同的高度和宽度值吗?
答案 1 :(得分:0)