在 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
。取消订阅活动。然后处理掉。
您可以将点列表保存到数据库或文件中。
我正在做一个学校项目,有一项任务需要创建 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
。取消订阅活动。然后处理掉。
您可以将点列表保存到数据库或文件中。