lvoers 2023-07-06 14:43 采纳率: 50%
浏览 62
已结题

winform坐标系起始位置及象素点显示问题

问题1
将winform坐标系(0,0)从右上角转换成左下角(0,0)?

img

目前我通过将画的方式将坐标系生成在左下角,但是 winfrom的真实坐标还是从 右上角 0,0 开始,并不是从左下角 (0,0)开始

img

问题2
按系统分辨率来生成坐标像素点,如我精确到1个象素一个点,那网格就非常的多,也无法看出所画出的圆,有没有什么方法来进行缩放,同时可以将象素点放大?

img

如悬赏不够的,可以私信我,我可以再追加一点点

  • 写回答

11条回答 默认 最新

  • PhoenixRiser 2023-07-06 14:46
    关注

    TechWhizKid参考GPT回答:

    问题1:
    在 Winforms 中,你可以在绘制的时候改变坐标系统,使其以左下角为 (0,0)。这可以通过设定转换矩阵实现。下面是一个例子:

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
    
        // 保存原始状态
        Matrix originalTransform = g.Transform;
    
        // 创建一个新的矩阵并应用翻转和平移变换
        Matrix transform = new Matrix();
        transform.Scale(1, -1); // 翻转 y 轴
        transform.Translate(0, -ClientSize.Height); // 平移
    
        // 应用转换
        g.Transform = transform;
    
        // 在新坐标系下绘制
        g.DrawLine(Pens.Red, 0, 0, 100, 100);
    
        // 恢复原始状态
        g.Transform = originalTransform;
    }
    

    这段代码首先保存了原始的 Graphics.Transform,然后创建了一个新的 Matrix 并设置了翻转和平移,这样 (0,0) 就位于左下角了。然后将这个新的转换应用到 Graphics 对象上,并在新的坐标系下绘制。最后,恢复了原始的 Graphics.Transform。

    问题2:
    你可以使用 Graphics 对象的 ScaleTransform 方法来进行缩放。这个方法会修改 Graphics 对象的当前转换,使得所有后续的绘制操作都会被缩放。

    以下是一个示例代码:

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
    
        // 缩放
        float scaleFactor = 0.5f; // 缩放比例,可以根据需要进行调整
        g.ScaleTransform(scaleFactor, scaleFactor);
    
        // 绘制一个圆,位置 (100, 100),半径50
        g.DrawEllipse(Pens.Red, 100 - 50, 100 - 50, 100, 100);
    }
    

    在这个示例中,ScaleTransform 方法用于缩放绘制操作。缩放比例由 scaleFactor 控制,你可以根据需要调整这个值。例如,你可以设置一个较小的 scaleFactor 值以缩小绘制的图像,或者设置一个较大的 scaleFactor 值以放大绘制的图像。

    这些操作都可以结合起来,先应用一个平移变换以改变坐标系的原点,然后应用一个缩放变换以改变绘制的大小。

    评论

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 创建了问题 7月6日