html5画布描边样式?

2024-01-02

我正在尝试将图像映射到使用描边样式和画布模拟布料的“3d”网格,我包含该图像,但它当前充当背景图像,实际上并不像波纹那样与“布料”一起流动,即随着网格的流动,图像是静态的。 这是jsfiddle http://jsfiddle.net/S7nBq/这是不言自明的(仅适用于 Chrome)。 任何帮助深表感谢。 这是将图像渲染到背景中的 javascript,我如何停止渲染为背景图像并仅使其填充网格?:

function update() {

    var img = new Image();
    img.src = 'http://free-textures.got3d.com/architectural/free-stone-wall-   textures/images/free-stone-wall-texture-002.jpg';
    img.onload = function() {

        // create pattern
        var ptrn = ctx.createPattern(img, 'repeat');

        ctx.clearRect(0, 0, canvas.width, canvas.height);

        physics.update();

        ctx.strokeStyle = ptrn;
        ctx.beginPath();
        var i = points.length;
        while (i--) points[i].draw();
        ctx.stroke();

        requestAnimFrame(update);
    }
}

原来是她的codepen http://codepen.io/stuffit/pen/KrAwx我从工作。 `更新了fiddle http://jsfiddle.net/S7nBq/图像位于函数 update() 之外: 目前它似乎实际上填充了单元格并将其应用为背景图像。有什么方法可以阻止它成为背景图像并仅将其应用于填充网格吗?我试过这个:
ctx.fillStyle = ptrn; 并删除第 260 行:
ctx.笔划样式 = ptrn; 但它似乎删除了背景图像,只是将其显示为黑色网格...再次感谢您的耐心


天啊!好问题!

那么让我们看看我们有什么。一个具有一堆“约束”的系统,这些“约束”是 2 个点的集合。约束本身成对出现,它们形成两条线,形成一条形状(盒子的右下角)。

如果我们单独绘制每条约束线,我们会看到:

这都是水平的红线和垂直的蓝线。画一个我们就可以看到形状,每条长红线实际上是数百条小线,每条线的底部形状,端对端。有数百个就在这里,它们一起使它看起来像一个有凝聚力的网格。事实上,每个人都已经是独立的,这对我们来说很容易。

这个形状就是我们确定某种边界框所需的全部。而且看起来每个Point in a Constraint带有原始值,所以我们将它们保存为sx and sy.

如果我们知道盒子在新位置的边界,并且我们知道原始边界,因为我们已经保存了约束的所有点值,那么我们应该是黄金。

一旦我们有了 Constraint 的原始边界框及其当前边界框,我们所要做的就是使用这两个框调用 drawImage :ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh);

我写了一个新的Constraint.prototype.draw例程,看起来像这样:

等等。

有几种方法可以“修补”漏洞,这完全取决于您,否则您将不得不进行转换。

看一下代码。我没有改变太多。寻找!!!在代码中(我的编辑)和DEBUG:在代码中(调试代码,以防图像未加载或您想查看线框)。

http://jsfiddle.net/simonsarris/Kuw6P/ http://jsfiddle.net/simonsarris/Kuw6P/

代码很长,所以我不想将其全部粘贴到这里,但这里有一个备份,以防 jsfiddle 出现故障:https://gist.github.com/simonsarris/5405304 https://gist.github.com/simonsarris/5405304

这是最相关的部分:

// !!! new super awesome draw routine! So cool we skipped naming it draw2!
Constraint.prototype.draw3 = function(otherP2) {

  // NOW dear friends consider what we have. Each box is made out of two lines,
  // the bottom and rightmost ones.
  // From these lines we can deduce the topleft and bottom-right points
  // From these points we can deduce rectangles
  // From the skewed rectangle vs the original rectangle we can "stretch"
  // an image, using drawImage's overloaded goodness.

  // AND WE'RE OFF:

  // destination rect has 2 points:
  //top left: Math.min(this.p2.x, otherP2.x), Math.min(this.p2.y, otherP2.y)
  //bottom right: (this.p1.x, this.p1.y)

  // image destination rectangle, a rect made from the two points
  var dx = Math.min(this.p1.x,  Math.min(this.p2.x, otherP2.x));
  var dy = Math.min(this.p1.y,  Math.min(this.p2.y, otherP2.y));
  var dw = Math.abs(this.p1.x - Math.min(this.p2.x, otherP2.x));
  var dh = Math.abs(this.p1.y - Math.min(this.p2.y, otherP2.y));
  // DEBUG: IF THERE IS NO IMAGE TURN THIS ON:
  //ctx.strokeStyle = 'lime';
  //ctx.strokeRect(dx, dy, dw, dh);

  // source rect 2 points:
  //top left: Math.min(this.p2.sx, otherP2.sx), Math.min(this.p2.sy, otherP2.sy)
  //bottom right: (this.p1.sx, this.p1.sy)

  // these do NOT need to be caluclated every time,
  // they never change for a given constraint
  // calculate them the first time only. I could do this earlier but I'm lazy
  // and its past midnight. See also: http://www.youtube.com/watch?v=FwaQxDkpcHY#t=64s
  if (this.sx === undefined) {
    this.sx = Math.min(this.p1.sx,  Math.min(this.p2.sx, otherP2.sx));
    this.sy = Math.min(this.p1.sy,  Math.min(this.p2.sy, otherP2.sy));
    this.sw = Math.abs(this.p1.sx - Math.min(this.p2.sx, otherP2.sx));
    this.sh = Math.abs(this.p1.sy - Math.min(this.p2.sy, otherP2.sy));
  }
  var sx = this.sx;
  var sy = this.sy;
  var sw = this.sw;
  var sh = this.sh;
  // DEBUG: IF THERE IS NO IMAGE TURN THIS ON:
  //ctx.strokeStyle = 'red';
  //ctx.strokeRect(sx, sy, sw, sh);


  // IF we have a source and destination rectangle, then we can map an image
  // piece using drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh)
  // Only problem, we're not exactly dealing with rectangles....
  // But we'll deal. Transformations have kooties anyways.
  ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html5画布描边样式? 的相关文章

  • JS文件中的System.register是什么意思?

    在 Angular 2 中使用指令时 JS 文件中的 System register 是什么意思 我认为这个问题并不特定于 Angular2 中的指令 它是关于 ES6 TypeScript 和其他使用 SystemJS 的现代编译器的一般
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • html 图像 src 调用 javaScript 变量

    这是我的代码 我想问 我怎样才能做到这一点 img src img apple 我一直在尝试使用 call 函数和 document onload 但它根本不起作用 有人可以救我吗 我假设你只是想用 javascript 更新图像 src
  • 有没有办法在 React 中自动播放音频而不使用 onClick 事件?

    我在尝试在 componentDidMount 中播放音频时收到此错误 未捕获 承诺中 DOMException play 失败 因为用户没有先与文档交互 componentDidMount document getElementById
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • Angular UI-Router:多个 URL 到单一状态

    我已经开始使用 Angular 的 ui router 并且我正在尝试弄清楚如何让多个 URL 引用单个状态 例如 orgs 12354 overview retyrns the same pages as org overview 我的
  • http和https在编程中有什么区别[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只知道 s 代表 安全 用户永远不
  • 在 UIWebView 中禁用复制和粘贴

    几乎 我已经尝试了一切方法来禁用复制 粘贴UIWebView但对我来说没有任何作用 我正在加载我的UIWebView来自字符串 字符串数组 如下所示 webView loadHTMLString NSString stringWithFor
  • SVG线宽问题

    我开始了我的svg学习 我想用svg线做一些技巧吧 但有件事我不明白 我为每个技能创建 2 行 一行是空的 另一行是知识百分比 问题是 前两行的高度是我给出的笔画宽度的一半 其他线都有很好的高度 这是一个 jsbin http jsbin
  • IE localStorage 事件失火

    在 Internet Explorer 9 和 10 中 localStorage 实现意外地触发事件 这里有很棒的线索 Chrome 的 localStorage 实现存在错误 https stackoverflow com questi
  • 如何在打字稿中使用外部js

    我通过 Typescript 代码生成 Angular JS 代码 在一种情况下 我需要将外部 JS 文件添加到我的打字稿文件中 并且需要访问 js 文件中的类 我像这样添加js文件
  • JQuery $.ajax() 在 java servlet 中发布数据

    我想将数据发送到 java servlet 进行处理 数据将具有可变长度并采用键 值对 A1984 1 A9873 5 A1674 2 A8724 1 A3574 3 A1165 5 数据不需要这样格式化 这就是我现在的方式 var sav
  • Javascript location.href 到 mailto 触发 GET HTTP,该 HTTP 在 Chrome 中被取消

    我有一个按钮可以触发以下 javascript 函数 function sendEmail var mail mailto email protected cdn cgi l email protection location href m
  • 在 javascript 中实现固定位置会导致 Safari 滚动时出现抖动

    固定位置不适用于我的用例 因为它固定在浏览器窗口上 您可能会处于文本在屏幕右侧之外且无法到达的状态 无论如何 我尝试使用绝对定位 然后调整javascript中的 顶部 它在 Firefox 和 Chrome 中运行良好 但在 Safari
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 此版本的 CLI 仅与 Angular 版本 5.0.0 或更高版本兼容错误

    我已经有 Angular 项目在 4 版本中运行 在安装新项目时 不幸的是我安装了 6 版本的 Angular cli 在以 4 版本运行的旧项目中运行 ngserve 命令时 这会引发错误 您的全局 Angular CLI 版本大于本地版
  • 标题的下边框小于宽度

    我需要创建一个下划线效果底部边框小于h2标题的宽度 通常我不上传图片 但我认为这可能有助于进一步解释问题 您可以为此使用伪元素 例子 http jsfiddle net SZ39x pseudo border position relati
  • html中锚标记中href和data-href的区别

    html中的href和data href属性有什么区别 a a 标签 我当前的代码写如下 a href verify phone process 1 html class btn btn default bubbla btn Sign In
  • 在 Firestore 文本字段中存储文本文件并删除换行符

    我正在尝试将 CSV 文件存储在 Cloud Firestore 内的文本字段中 然而 Firestore 正在删除所有换行符并将整个 CSV 文件存储为一行 这Firestore 数据类型文档 https firebase google
  • 如何从 Cloud Functions for Firebase 文件夹读取证书文件

    我正在尝试读取 certs 文件夹下的文件 如下所示 functions certs idp public cert perm 这是我用来读取文件的代码 fs readFileSync path join dirname certs idp

随机推荐

  • 如何解决错误:imread 不是 cv 的成员?

    我使用 OpenCV 3 0 和 Ubuntu 14 04 我正在尝试使用 OpenCV 在 Ubuntu 上编译一些代码 我收到错误 错误 imread 不是 cv 的成员 由于我之前的搜索知识 我尝试通过添加 highgui h 进行编
  • rmi ejb 调用中可重用登录会话的概念

    这不是一个简单的问题 只是因为我正在重新考虑通过登录和安全保护 EJB 3 0 服务的架构 我们在 JBoss 5 1 上有一个 EJB3 0 应用程序 它为 SWT 客户端提供各种服务来读取和写入数据 要使用服务 客户端必须使用有效的用户
  • 如何让 rufus-scheduler 与部署到 Heroku 的 Rails 应用程序一起工作?

    In config initializers我创建了一个名为task scheduler rb它包含以下代码 require rufus scheduler require mechanize scheduler Rufus Schedul
  • 使用 Guzzle 6 将文件上传到 API 端点

    我可以使用 Postman 将文件上传到 API 端点 我正在尝试将其转换为从表单上传文件 使用 Laravel 上传文件并使用 Guzzle 6 发布到端点 Screenshot of how it looks in Postman I
  • document.ActiveElement 不返回 Safari 中的活动元素

    在我正在编写的网站中 需要在发生某些事情之前显示一些确认文本 我使用的解决方案在单击按钮时显示一个模式窗口 当窗口关闭时 Jquery 会查看单击了哪个按钮 所以我有以下注销确认信息 function logOut on click fun
  • 无法更新 XCode:空间不足[重复]

    这个问题在这里已经有答案了 我正在尝试将 XCode 从 11 2 1 更新到 12 4 我从应用程序商店安装了 XCode 因此我尝试从那里更新它 我有 27 GB 的可用空间 但每次尝试更新时 都会提示我没有足够的空间 我不认为还有什么
  • Neoclipse 的替代品 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在玩neo4j来用JAVA存储一些数据 我希望有一个好方法来可视化我的 neo4j 数据库并查看属性等 主要是为了获得反馈并了解我在数
  • macOS 应用程序:处理绑定到全局键盘快捷键的组合键

    在某些应用程序中 应用程序直接处理键盘快捷键是有意义的 否则这些快捷键将绑定到系统范围的组合 例如 Space 通常是 Spotlight 或 Tab 通常是应用程序切换器 这适用于各种 Mac 应用程序 例如 VMWare Fusion
  • 将子元素范围包装在 div 中

    我试图将一系列子元素包装在 div 中 以便分组操作它们 尝试将每个组定位在不同的位置 场景是我有一个随机生成的列表li标签 无论出现多少个 我都需要单独操作每组十个标签 为了解决这个问题 我使用了一个书面列表 ul li ul li nt
  • ZSH RPROMPT 奇怪的间距?

    这是我的 ZSH 提示主题 function git prompt info ref git symbolic ref HEAD 2 gt dev null return echo parse git dirty ZSH THEME GIT
  • C语言这段代码是什么意思? if(按钮 & 1)==1 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对此很困
  • java.security.AccessControlException:访问被拒绝(java.io.FilePermission

    final File parentDir new File S PDSPopulatingProgram parentDir mkdir final String hash popupateData final String fileNam
  • 定制 Android 电话应用程序

    我认为这是正确的论坛 而不是 android stackechange 因为它与软件相关 我是一名 Java 开发新手 需要创建具有以下功能的自定义 Android 电话应用程序 设备启动时自动启动 以信息亭模式启动 无通知 或访问其他应用
  • 如何隐式转换模板化构造函数参数?

    我正在重载模板类的构造函数A对于标量和容器类型参数 具有不同的输入类型 template
  • 与任何 Excel 操作进行上下文同步时发生内部错误

    我有多个 Excel 工作簿导致 Excel API 抛出异常An internal error has occurred在我们在应用程序中进行的第一次上下文同步中 Excel代码看起来像这样 let range ctx workbook
  • 搜索具有特定文件内容的文件

    我正在尝试编辑许多具有特定文件内容的文件 我需要搜索那些有一些内容的文件 有没有任何软件可以非常准确地进行此类搜索 我尝试使用 Windows 7 进行搜索 但看起来丢失了许多文件 Thanks Windows 本机搜索可能非常有限 我建议
  • 由外部包导出的 React 和 Webpack 渲染组件

    我正在尝试使用外部脚本中公开的 React 组件 捆绑A 在我的主 React 应用程序中 捆绑包B 外部 React header 组件 捆绑A 是通过加载
  • 如何防止groupby超类索引?

    假设您有以下半多索引对象 https pandas pydata org pandas docs stable user guide advanced html creating a multiindex hierarchical inde
  • Visual Studio 调用堆栈窗口不显示文件名

    我正在 Visual Studio 中调试程序 我想知道为什么我的程序会传递到特定单元 源代码文件 中的函数旁边 我以为调用堆栈会显示这一点 但事实似乎并非如此 此外 可显示条目列表甚至没有提及文件名 显示模块名称 显示参数类型 显示参数名
  • html5画布描边样式?

    我正在尝试将图像映射到使用描边样式和画布模拟布料的 3d 网格 我包含该图像 但它当前充当背景图像 实际上并不像波纹那样与 布料 一起流动 即随着网格的流动 图像是静态的 这是jsfiddle http jsfiddle net S7nBq