网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

C# Graphics 中如何快速反转Y轴坐标系,方便后续绘

时间:2024-12-18 09:46

人气:

作者:admin

标签:

导读:这段时间搞东西发现 C# Windows库里 没有了以前 C 中 修改坐标系 的一些 API,比如 SetViewportExtEx,#160;SetWindowExtEx 这些东西。 众所周知,在 Windows 系统中,坐标系的原点是从左上角开始为(...

这段时间搞东西发现 C# Windows库里 没有了以前 C++ 中 修改坐标系 的一些 API,比如  SetViewportExtEx, SetWindowExtEx 这些东西。

众所周知,在 Windows 系统中,坐标系的原点是从左上角开始为(0,0)的,Y轴越下值越大。这与现实生活中场景,低的Y才是0,向上Y值会越来越大,正好相反。

 

如果顺从于Windows这样的坐标系,那么,我们在向Windows上画很多“现实”坐标内容时,不得不逐个修改”现实“坐标Y去”重计算“。这样会造成代码很难看,太耦合,或者有可能降低了绘制效率。

所以,在使用 Graphics 前这样两步设置后,就会很省事了。

代码如下:

private void testFlipY(Graphics g)
{
	g.ScaleTransform(1, -1);
	g.TranslateTransform(0, -this.ClientSize.Height+1);

	g.DrawLine(Pens.Black, 0, 0, 300, 200);

	//g.ResetTransform();
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
	testFlipY(e.Graphics);
}

ScaleTransform(1,-1),让Y轴坐标值相反。如果没有下面那一句 TranslateTransform(0, -this.ClientSize.Height+1),同样 DrawLine 时,Y轴就会从屏幕左上角往上画到窗口外去了,所以就看不到线。

TranslateTransform(0, -this.ClientSize.Height+1),重新定位后续的原点坐标,因为前面ScaleTransform(1,-1)后,左上角为(0,0)开始,Y轴向下为负值,向上为正值,现实生活中,我们通常认为从左下角开始为原点,因此没有调用这句前,左下角的Y值是窗口客户端的负高度值【-this.ClientSize.Height+1】,这句调用后,左下角的坐标就是新的原点(0,0)。此时,再调画线函数,Y值200就是向上方向,就可以画在窗口中了。

 

 至于为啥要 -this.ClientSize.Height+1,因为这里是坐标值,系统是从0值开始的,若窗口高度有100时,最高的地方值应是99,反之。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信