在 Windows Forms C# 中创建 POI 地图。如何将图标(图像)放在地图(图片框中的现有图像)上?

Creating a POI map in Windows Forms C#. How can I put icon (image) over a map (existing image in picturebox)?

我正在做一个学校项目,有一项任务需要创建 POI 地图。我是怎么做的:我需要在 picturebox 控件中加载图片(某个地方的地图,它可以只是从鸟的角度看体育场的图像),然后在 picturebox 获取坐标,并在该坐标上放置另一个图像(如一些小的自定义图标等)。

当然,在放置该图像时,我不想替换 picturebox 中的现有图像(地图),而是在现有图像上制作一张图像。另外,我需要记住我稍后将那些 "POI icons" 放在数据库中的位置,但这不是这个问题的一部分。 你们怎么看,是否可以这样做(图像,具有特定坐标,覆盖另一张已经填充 picturebox 的图像)或者我需要制作另一张 "idea" 如何解决我的问题?如果可能的话,我该怎么做(非常感谢带有示例的代码)?如果不可能,你能给我一些建议吗(其他 WinForms 控件、其他事件等)?提前谢谢你,请原谅语法错误。

试试这个(抱歉我的英语不好):

public partial class Form1 : Form
{
    public Form1()
    {
        //InitializeComponent();
        Width = 800;
        Height = 600;

        pictureBox = new PictureBox { Parent = this, Dock = DockStyle.Top, Height = 500 };
        pictureBox.ImageLocation = "pic.jpg";

        pictureBox.Click += PictureBox_Click;
    }

    PictureBox pictureBox;
    List<Point> points = new List<Point>();

    private void PictureBox_Click(object sender, EventArgs e)
    {
        var point = pictureBox.PointToClient(MousePosition);
        points.Add(point);
        var iconBox = new PictureBox { Parent = pictureBox, Location = point, Size = new Size(32, 32) };
        iconBox.Image = SystemIcons.Hand.ToBitmap();
        iconBox.Click += IconBox_Click;
    }

    private void IconBox_Click(object sender, EventArgs e)
    {
        var pb = (PictureBox)sender;
        points.Remove(pb.Location);
        pb.Parent = null;
        pb.Click -= IconBox_Click;
        pb.Dispose();
    }
}

Click 事件处理程序中,我们创建一个新的 PictureBox 并将其放在主 PictureBox 上。给他设置想要的图像(为简单起见,我使用系统图标)。

还为每个新 PictureBox 添加一个单击处理程序,以便通过鼠标单击将其删除。在它的处理程序中,我们从列表和父控件中删除了不必要的 PictureBox。取消订阅活动。然后处理掉。

您可以将点列表保存到数据库或文件中。