- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一个正在开发的项目中使用 HTML5 Canvas 元素,在渲染一堆东西时,我遇到了一个非常奇怪的工件,我想知道是否有人以前见过它。基本上,在这个特定的场景中(这是我见过的唯一会产生这种行为的情况),我碰巧在我的应用程序中进行平移/缩放,并注意到 Canvas 的一部分出现了非常奇怪的渲染效果。经过进一步检查,我能够在一个非常简单的示例中重现效果:
在这种情况下,我有一条路径(其坐标不会改变),从第一个屏幕截图到第二个屏幕截图的所有变化都是所应用的变换矩阵(变化量非常小)。
您可以访问我用来生成这些屏幕截图的 JSFiddle https://jsfiddle.net/ynsv66g8/这是相关的渲染代码:
// Clear context
context.setTransform(1, 0, 0, 1, 0, 0);
context.fillStyle = "#000000";
context.fillRect(0, 0, 500, 500);
if (showArtifact) { // This transformation causes the artifact
context.transform(0.42494658722537976, 0, 0, -0.42494658722537976, 243.95776291868646, 373.14630356628857);
} else { // This transformation does not
context.transform(0.4175650109545749, 0, 0, -0.4175650109545749, 243.70987992043368, 371.06797574381795);
}
// Draw path
context.lineWidth = 3.488963446543301;
context.strokeStyle = 'red';
context.beginPath();
var p = path[0];
context.moveTo(p[0], p[1]);
for (var i = 1; i < path.length; ++i) {
p = path[i];
context.lineTo(p[0], p[1]);
}
context.closePath();
context.stroke();
它看起来与对 canvas.closePath()
的调用有关,因为如果您删除对 context.closePath()
的调用并将其替换为:
p = path[0];
context.lineTo(p[0], p[1]);
(从而手动“关闭”路径)一切正常(当然,这确实不能解决我的特定问题,因为我依赖多个闭合路径来应用填充规则)。
另一个可以解决问题的有趣更改是反转 path
数组(即,通过添加对 path.reverse()
的调用)在其定义之后)。
总而言之,所有这些似乎都增加了某种与路径特征相关的浏览器渲染错误,特别是因为在我的 Mac 上,Chrome (v61.0.3163.91) 和 Firefox 都出现了该问题(v55.0.3) 但不是 Safari (v11)。我已经进行了一些广泛的搜索,试图找到这个问题(或类似的问题),但到目前为止还是一无所获。
任何对可能导致此问题的原因的深入了解(或者如果一致认为该问题是由某些浏览器错误引起的,则报告此问题的正确方法)将不胜感激。
最佳答案
这似乎是一个线斜接问题;也就是说,当宽度相对于线段大小/方向太大时,渲染器无法正确连接线。
这似乎不受路径关闭的影响(我可以使用开放路径重现工件);请注意,手动关闭路径与 closePath() 不同,因为在前一种情况下不执行行连接。
据我所知,这似乎是通过将 lineJoin 设置为“圆形”或减小线宽来解决的......无论如何,对我来说似乎是一个渲染器错误......只是我的两分钱:)
关于javascript - 奇怪的 HTML5 Canvas closePath 渲染神器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46368209/
我有一个库项目,在 Android Studio 1.3.0 上开发并部署到 Artifactory Open Source Local Repository (3.5) 但是当我尝试在应用程序项目中
logging 是 python 标准模块,用于记录和处理程序中的日志。 功能很强大,官方文档很详细,网上也有大量的说明和教程,但是对很多初次接触的同学来说,存在一些障碍。 一是因为标准库文
我正在尝试使用 Maven 生成用于在 Vignette Portal 上部署的工件。包装与war完全一样工件但文件应该有 car取而代之。 我尝试过但无法完成的选项。 使用 war 插件并重命名最终
为什么 Points AdditiveBlending 只在从右看而不是从左看时有效?设置 depthTest:false 会解决问题,但会引发另一个问题,即点覆盖其他网格。 My fir
我对 UITextField 在动画 block 中移动时出现的工件有疑问... 在我移动我的 UITextField 之前它看起来像这样: 像这样移动之后: 我的猜测是它与 UITextField
单击此导航菜单中的第一个下拉菜单后,它将按预期加下划线,一旦菜单失去焦点(即单击页面上的其他位置),标签末尾的下划线不会被删除。 仅在 Chrome(版本 45.0.2454.85 m)中发生 我希望
我有一个简单的“hello world”C++ 项目:https://github.com/RomainGoussault/Deepov 我使用 Eclipse IDE for C/C++ Devel
使用方法有两种,可以用 XShell 或 Putty 上去命令查看,也可以生成 html 报告。 下面介绍GoAccess 在 CentOS 上的安装方法: 1. 需要安装 GeoIP, ncu
我一整天都在尝试将我的 javafx 应用程序转换为 jar 文件。我正在使用 Java 1.7 更新 7。 Oracle 有 some information ,但它似乎散落在各处。 Intelli
我实际上希望通过项目中的传递依赖项获得 powermock 1.5.6 版,但我只得到 1.4.11。这是什么意思? 最佳答案 在解析依赖项时,Maven 将更喜欢 POM 部分中指定的版本,而不是从
是否有公开可用的 maven 存储库将 Apache Tomcat 二进制分发 ZIP 托管为 maven Artifact (我的意思是可以通过 http://tomcat.apache.org 下
我希望在单击时播放 mp4 工件文件。 但是,当我点击mp4工件文件时,它看起来像下图。它不播放 如果我下载它然后我可以在我的本地 PC 上播放它。 所以我尝试了 HTML5 嵌入功能来流式传输它。我
我在 VSTS 上设置了构建/测试/发布。我们还有另一个管道(在 Linux 中)从具有给定构建 ID 的构建系统中获取构建工件。那么有没有办法从 Linux 上的 VSTS 下载构建工件?我发现不登
用 Ventoy 创建多启动 U 盘,你将永远不会缺少自己喜欢的 Linux 发行版。 给朋友和邻居一个可启动 U 盘,里面包含你最喜欢的 Linux 发行版,是向 Linux 新手介绍我们都
API 管理工具可以说是每个前端/后端开发必备的工具了,一个好的 API 管理工具可以提高团队的工作效率。 目前市面上有不少 API 相关的工具,比如 Postman、swagger 等。最近我也尝试
我有一个关于 JFrog Artifactory 用于在 Artifact 中查找“事物”的 AQL( Artifact 查询语言)的问题。 AQL 似乎非常强大,但我想知道如何使用正确的术语构建(正
我正在使用 Maven 3.1.1、Java 6 和 JBoss 7.1.3。我想在我的 JSP 上将对象呈现为 JSON,但是当我将其包含在我的 pom 中时
每次我对 POM 进行最微小的更改时,Intellij 都会删除项目结构输出目录设置中分解 Artifact 的 .war 扩展名。这会导致 Intellij 的运行/调试配置出错: Artifact
我的目标是进行对象跟踪。 我有一个 UWP c# 应用程序和链接的 c++ windows 运行时组件。在那里我可以获得对 opencv 的访问权限。 在 c# 中,MediaCapture 返回 S
遵循 http://doc.gitlab.com/ee/ci/yaml/README.html 的文档设置文件 .yml 我通过创建 artifacts 发现了问题,当构建要下载此 ZIPAPK 文件
我是一名优秀的程序员,十分优秀!