0

我有一个脚本,它返回基于List颜色对象的热图(它们是从名为 Grasshopper 的图形“编码”软件中的渐变组件派生的 RGB 值),如下所示:

在此处输入图像描述

下面是我的 C# heatmap-drawing 方法的摘录,它返回一个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来调整尺寸,使其看起来很像我在画布上的东西?

4

2 回答 2

0

After some Googling it looks like I found a solution from this link

Specifically:

enter image description here

于 2013-12-11T16:55:37.717 回答
0

假设 _heatmap 是从 DrawHeatmap 方法的输出设置的,那么它的大小应该在该方法的初始化点设置为 U 乘 V 像素。保存后,从保存的文件中验证输出文件的大小(即,考虑到进入 DrawHeatmap 的 U 和 V 的值,它的尺寸是否符合预期?

当您在后面的代码部分中绘制矩形时,您是否使用与之前相同的高度和宽度值?

于 2013-12-11T16:01:57.803 回答