Где разместить координаты текста в графическом растровом изображении C#

Я написал метод C# Render, который отображает тепловую карту на холст Grasshopper. Grasshopper - это плагин Rhino, который допускает простой графический интерфейс программирования.

protected override void Render(Grasshopper.GUI.Canvas.GH_Canvas canvas, Graphics graphics, Grasshopper.GUI.Canvas.GH_CanvasChannel channel) {

            base.Render(canvas, graphics, channel);

            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].Image;
                    if (image == null)
                        continue;

                    Rectangle mapBounds = new Rectangle(x, y, maps[i].Width, maps[i].Height);
                    //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();

                    graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                    graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
                    graphics.DrawImage(image, mapBounds);
                    graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Default;
                    graphics.DrawRectangle(Pens.Black, mapBounds);

                    y = edgeBounds.Bottom - (mapBounds.Height) - 4;
                }
            }
        }

В настоящее время этот метод визуализации рисует изображение на холсте следующим образом:

С учетом сказанного я хотел бы поместить текст заголовка сверху и добавить метки для осей X и Y, как на стандартном графике тепловых карт. Тем не менее, мое понимание graphics Компонент слишком ограничен, и я хотел бы попросить помощи у вас, ребята.

Я провел некоторое исследование, и, похоже, drawText() метод может делать то, что я хочу: C# писать текст на растровом изображении

Но я не уверен, где указывать координаты, в то же время оставляя некоторое пространство в верхней части отображаемого графика для размещения текста заголовка.

1 ответ

Решение

Система координат, которую использует GDI+, начинается с верхнего угла, который равен (0,0) правому нижнему углу (fullimagewidth,fullimageheight)

введите описание изображения здесь

так что если вам нужно нарисовать верхний угол изображения, используйте

//Position
PointF drawPoint = new PointF(0F, 0F);
// Draw string to screen.
e.Graphics.DrawString("hey", drawFont, drawBrush, drawPoint);
Другие вопросы по тегам