简单的说,这是因为DrawRectangle的时候要画边框,实际面积要比Rectangle多一些。
而FillRectangle,则只是填充Rectangle的实际面积。

假设一个矩形(1,1,4,4),它的长宽各为4,理论面积为16,位置为(1,1)。
那么填充的时候,需要16个像素。

而当我们画矩形的时候,需要线条,假设线条的粗细为1。公平起见,线条的一半落在矩形里,线条的一半落在矩形外。
因此,这时含边框的矩形,实际占有了25个象素的面积,比理论矩形,长宽各多出了一个像素。

为什么多出的一个像素,要偏在右下方呢?
GDI+也想公平地画在的中间。但是,这就带来了骑墙的半个象素如何处理的问题。
因此,默认上GDI+就采用了最快的取整方法。也就造成你观察到的“右下边框不见”的现象。

实际上,GDI+也可以用偏移0.5的处理方法,并用抗锯齿的方式来展现半个像素。
因此,你这样画,既可以见到边框了:

private void pictureBox1_Paint(object sender, PaintEventArgs e){Graphics g = e.Graphics;g.SmoothingMode = SmoothingMode.HighQuality;  // 抗锯齿g.PixelOffsetMode = PixelOffsetMode.Half;         // 偏移0.5g.DrawRectangle(new Pen(Color.Red,5f), 0,0,pictureBox1.Width,pictureBox1.Height);}

如果代码如下

private void pictureBox1_Paint(object sender, PaintEventArgs e){Graphics g = e.Graphics;//g.SmoothingMode = SmoothingMode.HighQuality;  // 抗锯齿//g.PixelOffsetMode = PixelOffsetMode.Half;         // 偏移0.5g.DrawRectangle(new Pen(Color.Red,1f), 0,0,pictureBox1.Width,pictureBox1.Height);}

还有一种办法是绘制矩形是的宽高比画布小一也可以完全绘制矩形。

转载于:https://www.cnblogs.com/Earl-Zhaoy/p/7795027.html

GDI绘制矩形缺少右边和底部边界线问题相关推荐

  1. GDI+绘制圆角矩形

    1.最近,用到GDI+绘图,但是发现没有绘制圆角矩形的函数,故自己写了一个.下面贴出原理和代码,以作备份. 2.要绘制圆角矩形,基础是普通的直角矩形,需要做的就是将直角画成弧形. 3.绘制圆角矩形可以 ...

  2. 在MFC中,利用GDI绘制橡皮筋效果-直线,圆,椭圆,矩形

    这段时间学习了GDI和GDI+:如果想实现橡皮筋效果,还是离不开GDI.虽然GDI+也能实现,但比较麻烦,有局限性,必须用到双缓冲. 下面贴出GDI绘制橡皮筋效果的示例代码 ZKCADView.h: ...

  3. Windows GDI:CDC绘制矩形

    一. FillSolidRect 函数原型: void CDC::FillSolidRect(LPCRECT lpRect,COLORREF clr); 功能: 用指定颜色填充矩形区域 示例: COL ...

  4. C# 数据库系统中使用GDI+绘制柱状图

    在C#+SQL Server数据库做系统中,通常需要对数据库中的数据进行绘制图形报表方便经理查看,虽然有很多实用的水晶报表控件和图表控件实现该功能,但我还是想讲讲如何使用GDI绘制简单的柱状图.(推荐 ...

  5. MFC+GDI+绘制出雷达余晖效果

    MFC+GDI+绘制出雷达余晖效果 1.首先要画出静态的坐标轴,用双缓冲方法在onpain消息中绘制.绘制方法都比较简单.声明一个内存DC,绘制一个圆形,再把坐标轴画上去. void CDlg_Rad ...

  6. 椭圆形印章核心算法浅析及使用GDI+绘制椭圆印章的方法

    1. 引言 几年前,笔者在做某项目时,需要根据开票方的实际信息(含企业名称,社会信用代码,印章编号)绘制某椭圆形的专用章,加盖到PDF版式文件上,并使用开票方的证书信息进行签名,以防范版式文件伪造.抵 ...

  7. HTML在指定位置画一个矩形,CAD如何在指定位置绘制矩形?

    在CAD制图中,打好基础是非常重要的,在CAD中有很多基础操作,只有当我们牢牢掌握这些技巧的时候,绘制图纸的时候才能更加的得心应手,今天很大家分享一下澡CAD制动位置绘制举行的操作方法吧! 绘制矩形是 ...

  8. 用C# GDI 绘制一张精美的分享二维码图片

    C# 用GDI 绘制一张精美的分享二维码图片 简单干脆,直接上代码 下面附带上面用到的一些方法 最后附带 最终生成效果 简单干脆,直接上代码 var key = "http://www.xx ...

  9. HTML5利用Canvas绘制图形(Canvas基本知识、绘制矩形、使用路径和图形组合)

    绘制图形有很多方法,可以借助Flash实现,也可以使用SVG和VML来绘图.本次将要学习一种新的灰土方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形, ...

  10. cad绘制椭圆的方法有几种_CAD新手入门教学:如何绘制矩形?

    各位热爱CAD的知友们,图图开了一个[电脑版的CAD教程]合辑,以后每周五给大家分享CAD教程啦,记得一定要来看呀!(仅为新手教学,大佬看见可直接说出更简易操作) 其实绘制矩形在CAD中来说,真的是一 ...

最新文章

  1. bzoj3467: Crash和陶陶的游戏
  2. 主梁弹性模量计算_收藏 | 钢结构计算公式
  3. 调整搜索二叉树中两个错误的节点
  4. 介绍一些好用的ArcToolbox工具(默认ArcGIS没有)
  5. 标准时间校对_光源色灯箱标准原理
  6. 人生苦短,Python值得!这些Pandas隐藏小技巧你知道吗?
  7. django ajax获取数据类型,Django:使用Ajax获取模板中的数据库对象值
  8. (minio学习过程2)纠错码
  9. win7用html做背景,怎么美化和自定义Win7鼠标右键菜单背景?
  10. 在埋头写程序学技术的同时,有没有想到你们的老板和上司在搞什么?
  11. 51单片机~红外通信工作原理
  12. Modifier源码总结
  13. 一款英国折叠车如何在中国城市流行?
  14. 项目总结:积分兑换商城
  15. 微信小程序分享到朋友圈,在朋友圈打开报错 error code -501023
  16. Spring7种事务的传播行为
  17. 硬盘分区出错提示磁盘结构损坏且无法读取怎么修复??
  18. OC 基础 UIControl
  19. Impala之02-原理、架构分析(1)
  20. 学习LabVIEW应看的几本书

热门文章

  1. 5、SpringBoot+MyBaits+Maven+Idea+pagehelper分页插件
  2. FIFO、LRU、LFU的含义和原理(转)
  3. contenteditable
  4. c++中的c_str()函数
  5. DB天气app冲刺第十一天
  6. 德州扑克的思考和实验
  7. 【Oracle】 expdp/impdp
  8. Pidgin cannot connect to MSN: the certificate chain presented is invalid
  9. mysqldump备份所有数据库,恢复单个库的场景预演
  10. webpack如何全局引入jquery和echarts?