RetangleF.Union的奇怪表现

本文描述了一个关于使用.NET 2.0进行CAD/CAM图形显示时出现的问题:在某些计算机上,图形填充区域异常扩大到了半个屏幕。经过一系列调试,最终定位到问题是由空矩形边界引发,并给出了相应的解决方案。

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

  这几天有一个问题困扰了我很久。
  我用.Net 2.0做一个CAD/CAM方面的图形显示。结果,有一个文件显示不正常:本来应该填充一个图形的包围盒,结果填充了半个屏幕。
  最困扰的地方是,在开发机上显示正常,而在用户的机器上不正常。于是,换一台机器试,哈,出问题了。于是就在出故障机上进行调试——见鬼了,不出问题了。
  鼓捣了半天,发现debug版本都不会出问题,release版本会出问题,而且release版本在编译它的机器上不会出问题——狂晕。
  只好在一台机器编译好后,拷到另一台进行附加进程调试,最终锁定BUG:
None.gifbounds[i] = RectangleF.Union(bounds[i], elem.BoundsBox);

  跟踪中发现,在某些时候,elem.BoundsBox会出现{0,0,0,0}值,于是bounds[i]就变成从{0,0}坐标开始,把屏幕填充个够。
  解决方法倒是挺简单,判断elem.BoundsBox.IsEmpty,如果为真就不进行Union。

  就是不知道为什么Union对于Empty矩形的操作,居然能在编译它的机器上运行正常!实在不解,只有先记下来,以后遇到Union的使用,一定要排除Empty矩形。

转载于:https://www.cnblogs.com/ly4cn/archive/2006/06/27/436614.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值