C#中利用pictureBox画点的心得

本文详细介绍了如何在Picturebox控件中绘制具有浮点数或双精度坐标的点,并讨论了坐标转换及显示原理。通过实例演示了如何在PictureBox中正确绘制并显示坐标点,包括坐标转换函数的应用以及绘制过程的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     首先要讲点理论。

在picturebox中各种DrawRectangle,DrawLine等方法中都可以看到参数是int型(这是因为在电脑屏幕上画点都是根据像素来的,像素又都是整型),那么如果我们要画的点是float型或double型可以画吗?答案:当然可以画啦。无论double型的坐标多大或多小,通过放射变换都可以转到屏幕坐标范围内,利用强制转换为int就可以画了。

double x;
int x1=(int)x;
如你的坐标是(2000000.135,321599.234),则定义一个统一的转换函数将坐标转换到你的图片框中范围内,实际点集的坐标不影响图形的显示,两个点在当前视图下可能因为四舍五入重合在一起,但是放大当前视图后,这两个点就分离,ArcMap也是同样的道理。(只要坐标没有超过当前视图范围就行了)


在picturebox画点的时候刚开始居然没有显示,后来才知道原来是忘了写挂接事件这句话。

public DrawPoint()
        {
            InitializeComponent();
            this.Load += new EventHandler(DrawPoint_Load);/////////
        }

private void DrawPoint_Load(object sender, EventArgs e)
        {
            bmp = new Bitmap(picMap.Width, picMap.Height);
            grp = Graphics.FromImage(bmp);
            grp.Clear(picMap.BackColor);
            pen = new Pen(Color.Black, 1
### 在 C# 中使用 PictureBox 绘制点的方法 在 C# 的 WinForms 应用程序中,可以通过 `Graphics` 类和 `PictureBox` 控件来绘制点。以下是详细的实现方法和示例代码: 1. **设置 PictureBox 控件** 首先需要创建一个 `PictureBox` 控件,并确保其 `Image` 属性为空或设置为自定义背景图片。同时,可以设置 `SizeMode` 属性以调整图片的显示方式[^1]。 2. **获取 Graphics 对象** 使用 `CreateGraphics()` 方法从 `PictureBox` 获取 `Graphics` 对象。通过该对象可以调用绘图方法。 3. **绘制点** 使用 `Graphics.FillEllipse()` 或 `Graphics.DrawRectangle()` 方法绘制点。通常使用小圆圈表示点,以便更直观地展示位置。 以下是一个完整的示例代码,展示如何在 `PictureBox` 上绘制点: ```csharp using System; using System.Drawing; using System.Windows.Forms; namespace PictureBoxDrawPointExample { public partial class Form1 : Form { private PictureBox pictureBox; public Form1() { InitializeComponent(); InitializePictureBox(); } private void InitializePictureBox() { // 创建 PictureBox 控件 pictureBox = new PictureBox { Location = new Point(10, 10), Size = new Size(400, 300), BorderStyle = BorderStyle.FixedSingle, // 添加边框 SizeMode = PictureBoxSizeMode.Normal }; this.Controls.Add(pictureBox); // 绘制点 DrawPointOnPictureBox(new Point(100, 150), Color.Red); // 在 (100, 150) 处绘制红色点 DrawPointOnPictureBox(new Point(200, 100), Color.Blue); // 在 (200, 100) 处绘制蓝色点 } private void DrawPointOnPictureBox(Point point, Color color) { using (Graphics graphics = pictureBox.CreateGraphics()) { using (SolidBrush brush = new SolidBrush(color)) { // 使用 FillEllipse 绘制一个小圆圈作为点 graphics.FillEllipse(brush, point.X - 2, point.Y - 2, 4, 4); } } } } } ``` ### 注意事项 - 每次调用 `CreateGraphics()` 方法时都会创建一个新的 `Graphics` 对象,因此如果需要多次绘制,建议将所有绘制操作集中在一个地方执行。 - 如果需要动态更新 `PictureBox` 内容,可以在 `Paint` 事件中处理绘图逻辑[^3]。 ```csharp private void pictureBox_Paint(object sender, PaintEventArgs e) { Graphics graphics = e.Graphics; using (SolidBrush brush = new SolidBrush(Color.Green)) { graphics.FillEllipse(brush, 100 - 2, 150 - 2, 4, 4); // 绿色点 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值