51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 1434|回复: 0

[资料] Size和SizeF结构

[复制链接]
  • TA的每日心情
    点赞
    22 小时前
  • 签到天数: 955 天

    连续签到: 1 天

    [LV.10]以坛为家III

    379

    主题

    1552

    帖子

    7284

    积分

    Rank: 9

    积分
    7284

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2016-6-10 18:04:05 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x

    与Point和PointF一样,Size也有两个变体。Size结构用于int类型,SizeF用于float类型,除此之外,Size和 SizeF是完全相同的。下面主要讨论Size结构。

    在许多情况下,Size结构与Point结构是相同的,它也有两个整型属性,表示水平和垂直距离-- 主要区别是这两个属性的名称不是X和Y,而是Width 和 Height。前面的图33-3可以表示为:

    1. Size ab = new Size(20,10);
    2. Console.WriteLine("Moved {0} across, {1} down", ab.Width, ab.Height);
    复制代码
    严格地讲,Size在数学上与Point表示的含义相同;但在概念上它使用的方式略有不同。Point用于说明实体在什么地方,而Size用于说明实体有多大。但是,Size和Point是紧密相关的,目前甚至支持它们之间的显式转换:
    1. Point point = new Point(20, 10);
    2. Size size = (Size) point;
    3. Point anotherPoint = (Point) size;
    复制代码

    例如,考虑前面绘制的矩形,其左上角的坐标是(0,0),大小是(50,50)。这个矩形的大小是(50,50),可以用一个Size实例来表示。其右下角的坐标也是(50,50),但它由一个Point实例来表示。要理解这个区别,假定在另一个位置绘制该矩形,其左上角的坐标是(10,10):

    1. dc.DrawRectangle(bluePen, 10,10,50,50);
    复制代码

    现在其右下角的坐标是(60,60),但大小不变,仍是(50,50)。

    Point和Size结构的相加运算符都已经重载了,所以可以把一个Size加到Point结构上,得到另一个Point结构:

    1. static void Main(string[] args)
    2. {
    3. Point topLeft = new Point(10,10);
    4. Size rectangleSize = new Size(50,50);
    5. Point bottomRight = topLeft + rectangleSize;
    6. Console.WriteLine("topLeft = " + topLeft);
    7. Console.WriteLine("bottomRight = " + bottomRight);
    8. Console.WriteLine("Size = " + rectangleSize);
    9. }
    复制代码

    把这段代码作为控制台应用程序PointAndSizes来运行,会得到如图33-4所示的结果。

    (点击查看大图)图  33-4

    注意,这个结果也说明了Point 和 Size的ToString()方法已被重写,并以{X,Y}格式显示值。

    也可以从一个Point减去某个Size,得到另一个Point,还可以把两个Size加在一起,得到另一个Size。但不能把一个Point加到另一个Point上。Microsoft认为Point相加在概念上没有意义,所以不支持加(+)运算符的任何重载版本进行这样的操作。

    还可以在Point和Size之间进行显式的数据类型转换:

    1. Point topLeft = new Point(10,10);
    2. Size s1 = (Size)topLeft;
    3. Point p1 = (Point)s1;
    复制代码

    在进行这样的数据类型转换时,s1.Width被赋予topLeft.X的值,s1.Height被赋予topLeft.Y的值,因此s1包含(10,10)。p1最终的值与topLeft的值相同。



    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    有问题需要咨询站长?| 申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    CopyRight © 2015-2020 51Halcon机器视觉. Tencent Cloud X3.4.

    快速回复 返回顶部 返回列表