2010-09-30 71 views
1

我想写一个简单的程序,当点击图像时,我可以在图像顶部叠加一个点。我可以将X和Y数据保存回我的数据库,但之后我希望能够在稍后的日期再次调用该信息,并通过代码再次覆盖这些点,这与用户第一次单击图像时不同。在点击图像上叠加一个'点'

我得到了尽可能多的捕获点击的X和Y没有问题,但我无法找到特别为我正在尝试做的示例。所有在线示例似乎都是用于添加图形来保存图像,但我不需要这样做,因为它每次都会有相同的图像。

一旦我可以做到这一点,我还需要找出一种方法,我可以检测到图像的哪个区域被点击。我需要标记的区域在形状和大小上有所不同,所以我需要尝试找出一种方法来“映射”这些区域,然后与用户点击的坐标进行交叉参考(我假设我可能需要做一些聪明的几何的东西呢?)

如果任何人有任何建议什么科目/类/方法等研究任何一个我的查询,我将非常感激。

在此先感谢

回答

1

您可以使用System.Drawing命名空间来实现此目的。

创建一个控件并覆盖OnPaint和OnPaintBackground。存储您点击一个列表

  • OnPaintBackground,画出使用被传递给你作为一个参数的图形对象使用DrawImageUnscaled图像。

  • OnPaint中,循环遍历你的点数组,并调用graphics.FillElipse或类似的方法画出一个点。

因为这不是一个保留模式的图形系统,你需要不断绘制这些项目,所以这可能不适合大量的点。在这种情况下,您可以使用graphics.FromImage创建内存位图并获取图形绘制对象。

+0

嗨,詹姆斯,感谢您的快速回复!我知道我必须走下这个系统。拉动路线,但我不熟悉'创建控制并覆盖它' - 请你再解释一下吗?另外 - 我假设我会使用图片框来显示图片?我的所有代码都需要坐在/从哪里开始 - 一个picturebox事件?对不起 - 我不是一个完整的新手,但我从来没有用这种方式在C#中处理图像。 – 2010-09-30 14:56:11

+0

我们正在做的是基本上用一些附加功能编写一个picturebox控件。除非您想使用滚动,否则最好从Control直接继承。以下内容会帮助您开始:http://ondotnet.com/pub/a/dotnet/2002/03/18/customcontrols.html – 2010-09-30 16:59:33