Bitmap上DrawString的问题

时间:2014-01-09 15:22:42

标签: c# graphics bitmap

我有这个构造函数,它接受Color个对象和一些misc字符串(如file位置和大小list)的输入,并将此热图存储到名为bitmap的{​​{1}}实例。一切都很好,但我的主要问题是我没有办法将文字渲染到这个热图上。我想将标题文本和x和y轴标签叠加到此位图上。

_image_

下面,我还有一个调整图像大小的方法(没有太多的失真),我想我也可以使用它,因为我有一个 public HeatMap(IEnumerable<Color> colors, int width, int height, string file, int U, int V) { if (colors == null) throw new ArgumentNullException("colors"); if (width <= 0) throw new ArgumentException("width must be at least 1"); if (height <= 0) throw new ArgumentException("height must be at least 1"); _width = width; _height = height; _file = file; _image = new Bitmap(U, V, PixelFormat.Format32bppArgb); Graphics graphics = Graphics.FromImage(_image); graphics.Clear(Color.White); graphics.Dispose(); int x = 0; int y = 0; foreach (Color color in colors) { _image.SetPixel(x, y, color); // This can be speeded up by using GH_MemoryBitmap if you want. y++; if (y >= V) { y = 0; x++; } if (x >= U) break; } } 对象我可以使用,如下所示:< / p>

graphics

使用上面的内容,我能够在其上叠加文字作为起点。我的问题是,如何在上面的图像上添加一个白色边框(所以我的文字不会与我的图形重叠),然后将x和y轴文本叠加到它上面?

我想我的具体问题是 - 如何将文字渲染到热像图的每四列?在大多数情况下,有100个x轴对象,就像24个y轴对象一样。 y轴将具有一天的时间,而x轴具有一年中的某一天。我对在C#中使用图形的熟悉程度非常低,所以任何指针都非常受欢迎。

1 个答案:

答案 0 :(得分:0)

你必须在graphics.Dispose()之前和Clear()之后使用DrawString。

Graphics graphics = Graphics.FromImage(_image);
graphics.Clear(Color.WhiteSmoke);
graphics.DrawString("your text", SystemFonts.DefaultFont, Brushes.Black, new PointF(0, 0));
graphics.Dispose();

如果PointF(0,0)表示文本占位符的左上角,则需要根据热图的位置计算文本位置。

更新(对齐)

您可以将文本与虚拟矩形对齐,执行以下操作:

Graphics graphics = Graphics.FromImage(_image);
graphics.Clear(Color.WhiteSmoke);
StringFormat stringFormat = new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
graphics.DrawString("your text", SystemFonts.DefaultFont, Brushes.Black, new RectangleF(0, 0, 100, 100), stringFormat);
graphics.Dispose();

在这种情况下,我在左上角创建了一个100x100的虚拟框,文本的h / v相对于此框居中。