添加抗锯齿功能

2023-12-02

我正在尝试使用抗锯齿功能,但我不知道为什么它不起作用:

Pen pen = new Pen(Color.Black, 3);
Pen r = new Pen(Color.YellowGreen, 3);
Graphics b = panel2.CreateGraphics();
b.DrawEllipse(pen, 6, 0, 90, 90);
b.SmoothingMode = SmoothingMode.AntiAlias;
b.DrawLine(r, new Point(50, 90), new Point(50, 0));

首先应该指出的是Graphics对象不contain任何图形;它是一个tool它允许您在相关位图上绘图,包括控件的表面。因此改变它的任何属性,比如SmoothingMode only影响你绘制的图形从那时起,不是你画的任何东西before..

圈子肯定是would有抗锯齿像素if你会画它after设置SmoothingMode从其默认值None to AntiAlias.

该线是vertical,所以它不需要抗锯齿,除了在它的末端,在那里is一些。但如果你倾斜它或将它移动到非整数抗锯齿位置将会显示!

让我们稍微修改一下代码并仔细查看结果:

Pen pen = new Pen(Color.Black, 3);
Pen r = new Pen(Color.YellowGreen, 3);
Graphics b = panel2.CreateGraphics();
b.DrawEllipse(pen, 6, 6, 90, 90);
b.SmoothingMode = SmoothingMode.AntiAlias;
b.DrawLine(r, new Point(50, 90), new Point(50, 0));

b.DrawLine(r, new Point(60, 90), new Point(70, 0));
b.DrawLine(r, new PointF(40.5f, 90), new PointF(40.5f, 0));
b.DrawEllipse(pen, 6, 6, 30, 30);

enter image description hereenter image description here

较小的圆圈有许多灰色像素,甚至原始的绿线也有较浅的顶端。两条新线现在已完全消除锯齿,一条是因为它是倾斜的,另一条是因为它位于像素“之间”。

顺便说一句:如果它打开你会also当您的Pen.Width is even或者当它是一个非整数数字。后者的原因应该是显而易见的;前者来自PenAlignment财产。它的默认值Center尝试将笔居中,但不是在像素边界处,而是在坐标像素的中心处。因此只有一个unevenwidth 将完全填充像素并且不会导致抗锯齿。为了闭合形状您可以通过更改来更改此行为Pen.Alignment to Inset:

此属性决定笔如何绘制闭合曲线以及 多边形。 PenAlignment 枚举指定五个值; 但是,只有两个值(Center 和 Inset)会改变外观 的一条画线。 Center 是该属性的默认值, 指定画笔的宽度以轮廓线为中心 曲线或多边形。此属性的 Inset 值指定 笔的宽度在曲线或多边形的轮廓内部。这 其他三个值,Right、Left 和 Outset,将产生一支笔 是居中的。

将对齐方式设置为“插入”的笔将产生不可靠的结果 结果,有时在插入位置绘制,有时在 居中位置。此外,不能使用插入笔绘制复合图 线,并且无法使用三角形破折号绘制虚线。

PS:问题不在于如何画properly,所以让我注意到你never应该使用control.CreateGraphics因为这总是只会导致非持久图形。相反,您需要使用Paint事件及其e.Graphics目的..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加抗锯齿功能 的相关文章

  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • Selenium ChromeDriver 目前是否支持处理弹出窗口?

    单击 Chrome 浏览器上的按钮后 我必须处理一个弹出窗口 一旦以编程方式启动弹出窗口 驱动程序对象的任何进一步操作都会导致此异常 OpenQA Selenium WebDriverException 服务器没有对 url 做出响应 窗口
  • 关于 ArangoDB 中多个索引的使用

    具有以下结构的文档 path String enabled Long disabled null Long other fields 我想通过路径前缀和某些数字与文档时间戳之间的数字关系的组合来查找文档 伪代码 SELECT e FROM
  • 在居中的动态宽度父级中左对齐子级

    我有点无法理解它 而且也很难在网络 此处找到正确的解决方案 因为它很难制定 基本上我想要的是像左对齐图像的居中对齐 所以它应该是一个居中的动态宽度父div 宽度取决于浏览器宽度 它保存带有在一行中呈现的图像的div 但新行应该左对齐 我可以
  • CardView 海拔高度不适用于 Android 5.1.1

    我在 RecyclerView 中使用 CardView 经过大量阅读后 我最终只在 Android 5 1 1 上遵循 不工作 代码 在之前的 Android 版本上 它运行良好
  • SoftLayer 通过 userStatusID 获取用户

    我正在尝试检索SoftLayer 用户配置文件通过用户状态 ID 我正在使用网址
  • Discord.js v13 语音通道数据未更新

    我的 Slash 命令已注册 但它们出现不一致 我的用法的简化版本 client on interactionCreate async interaction gt if interaction isCommand return conso
  • 如何创建输出自定义类型的 Swift Regex?

    In the 全球开发者大会视频 结果表明你可以这样做Captures TryCapture正则表达式生成器中的 s let regex Regex TryCapture OneOrMore digit transform Int 0 和输
  • 在 Android 中嵌入 Knopflerfish 不起作用

    我正在尝试将 Knopflerfish 框架嵌入到 Android 应用程序中以动态加载和卸载包 我跟着this教程 我做的第一步是从下载framework jarthis链接 并将其添加到我的 Eclipse 项目中的类路径中 另外 下面
  • Titanium - Android 外部存储 - 创建新目录,然后将文件写入其中

    我们是否不能简单地以编程方式在 Android 的外部 SD 卡 而不是设备的内部存储器 上创建新目录 并且我们不能在 SD 卡上写入文件 Titanium 是否受到如此限制 即使在使用后也始终在内部存储器上写入文件Ti Filesyste
  • 直线与 AABB 矩形相交?

    最好不使用任何类型的循环 因为这将在游戏中使用 我希望将一条线与任意大小的矩形相交 但我也希望返回交点 有可能 我已经做了一些谷歌搜索 但仍然没有解决 该线使用 x1 y1 x2 y2 定义 矩形也有这两点 我建议简单地对构成矩形的每个线段
  • 可变参数模板参数总是必须放在最后吗?

    我是否总是必须将可变参数模板参数放在模板参数的末尾 template
  • 空手道框架 - 如何检查比赛中的条件 OR 包含响应

    作为示例 我尝试使用匹配包含来验证我的架构响应和数据类型 有时它返回 null 有时它会返回字符串 我正在尝试以下操作 但断言失败 因为它的计算结果不为 true 我正在尝试以下操作 match each response data Res
  • 表单中的条件字段

    我需要创建一个 Form 类 该类可能有或没有 ReCaptcha 字段 具体取决于用户是否登录 因为这是一个 CommentForm 所以我无权访问request表单创建 定义上的对象 所以我不能依赖它 For the POST请求解决方
  • 电子邮件触发 PHP 脚本...可能吗?

    我需要根据我控制的电子邮件帐户设置自动回复trigger words在电子邮件正文中 而且 它还需要根据发送到此电子邮件帐户 属于我的网站 的触发词从数据库表中添加 删除行 并且在某些情况下 如果发送到一个论坛 则需要在论坛内创建一个主题
  • 在 Swift 中从 NSString 创建 NSData

    我试图最终拥有一个NSMutableURLRequest具有有效的HTTPBody 但我似乎无法获取我的字符串数据 来自UITextField 转化为可用的NSData object 我见过这种方法可以用另一种方式 NSString dat
  • Facebook 博主的开放图标签 - OG 图像太小。我可以指定全尺寸图像而不是缩略图吗?

    Blogger 不允许您在每个帖子中指定开放图形图像 目前 模板中有一段代码指定自动生成的缩略图作为facebook的开放图图像 问题是 缩略图是 72 72 而 Facebook 现在要求 OG 图像的宽度至少为 200px 否则默认为页
  • Pyinstaller 在 python 3.7 中不起作用(找不到模块“编码”)

    我有下面的测试程序 我用 pyinstaller Python 版本 3 7b Windows 10 64 位 编译代码 在编译和错误期间注意到警告 我将不胜感激任何解决这个问题的见解 Test py import encodings pr
  • 在函数内部创建方法

    我正在尝试在函数内创建方法 我可以这样做 function sample sample show function alert 我会看到警报呼叫sample show 但出于代码美化的原因 我想将所有方法声明移至函数内 我尝试过 funct
  • Python 图像库 - 文本渲染

    我正在尝试使用 PIL 渲染一些文本 但坦率地说 结果很糟糕 例如 这是我在 Photoshop 中编写的一些文本 PIL 的结果是 正如您所看到的 PIL 的结果不太令人满意 也许我只是比较挑剔 但是有没有什么方法可以使用 PIL 绘制文
  • 添加抗锯齿功能

    我正在尝试使用抗锯齿功能 但我不知道为什么它不起作用 Pen pen new Pen Color Black 3 Pen r new Pen Color YellowGreen 3 Graphics b panel2 CreateGraph