- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有没有办法使用 javascript html5 canvas 来创建一个多边形,然后在其中显示图像而不是颜色?
最佳答案
经过一些研究,我相信首先使用您的图像创建一个图案,然后将该图案设置为 fillStyle
可以做到这一点:
var ctx = canvas.getContext("2d");
var pattern = ctx.createPattern(imageObj, "repeat");
ctx.fillStyle = pattern;
然后只需创建多边形(使用 moveTo
和 lineTo
)然后正常填充它即可。
来源:this plugin的源代码。免责声明:我自己还没有尝试确认是否有效。
更新:我仍在研究您是否可以操纵图像以适应任意多边形。原则上,您可以使用 setTransform
这样做:
ctx.save();
ctx.setTransform(m11, m12, m21, m22, dx, dy);
ctx.drawImage(imageObj);
ctx.restore();
确定 setTransform
参数的值(如果可能的话)是棘手的部分。自从我做任何数学以来已经很久了,但如果我没记错的话,这里是需要做的事情:
(0,0) --- (w,0) (x1,y1) --- (x2,y2)
| | | |
| Image | => | Morphed |
| | | |
(0,h) --- (w,h) (x3,y3) --- (x4,y4)
对于每个点,您将执行以下矩阵运算:
|m11 m21 dx| |xI| |xM|
|m12 m22 dy| X |yI| = |yM|
| 0 0 1| | 1| | 1|
八个方程,六个变量(记住矩阵元素是变量,其余的是常量——我们的输入)。可能无解。现在只需推导(或谷歌搜索,或在 Math.SE 中询问...)并为每个参数实现公式...
更新 2: 虽然我没有确凿的证据证明这一点,但我相信用 setTransform
做你想做的事是不可能的。查看 Gimp 如何使用其“透视”工具,有必要更改转换矩阵的第三行以将图像转换为任意多边形。并且 Canvas API 似乎没有为此提供方法(通常只支持仿射变换:平移、旋转、缩放、剪切或以上的组合)。
引用 this post在 2D 变换上:
CSS3 2D-Transforms can only transform blocks into parallelograms. For example, it is impossible to transform a block into this shape: [Irregular Shape] In order to do this, one must use CSS3 3D Transforms. This is why the Matrix Construction Set only has three control points to drag around, not four.
有计划 CSS 3D Transforms ,但不仅我不知道它得到了多广泛的支持,我也不知道 Canvas 元素(具有 2d 上下文,即 - WebGL 是另一回事)是否会支持它。简而言之,通过我所知道的任何方式都不可能做你想做的事。
关于javascript - HTML5 Canvas ,多边形上/多边形中的图像可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10661844/
我已经实现了 Bentley-Ottmann-algorithm检测多边形-多边形交叉点。这通常非常有效:由于多边形不自相交,因此两个多边形的线段并集中的任何线段相交表明两个多边形相交。 但是如果我看
我在 Silverlight 中有一个多边形(棋盘游戏的十六进制),例如; public class GridHex : IGridShape { ..... public IList
我创建了一个简单的 DirectX 应用程序来渲染一个顶点场。顶点呈现如下(如果从顶部查看): |\|\|\|\| |\|\|\|\| 每个三角形都是这样渲染的: 1 |\ 2 3 这应该意味着多边形
我的代码的某些部分here : var stage = new Kinetic.Stage({ container: "canvas", width: 300,
我正在尝试从 map 数据构造导航网格物体。步骤之一涉及将二进制图像(其中0表示占用空间,1表示自由空间)转换成平面直线图。 我正在尝试找到一种可靠的方法。我目前的想法是使用Canny边缘检测器,然后
我的任务是编写 MATLAB 代码来生成一个由 4 部分组成的 Logo ,如屏幕截图所示。左上角应为黑色,右下角应为白色。另一个程序应随机选择两种颜色。 我采取了以下方法: clear all cl
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
如何向 google.maps.Rectangle 和 google.maps.Polygon 添加标题? title 属性在 RectangleOptions 中不可用.我试过了,但没用(对于 go
我有一个表,用于将表上的段存储为多边形。然后我想获取所有被另一个多边形接触的线段,例如正方形或圆形。图片上:http://img.acianetmedia.com/GJ3 我将灰色小框表示为段和 bi
我正在我的网站上使用 CSS 来制作形状。它在 chrome 中运行良好,但在 mozilla、internet explorer 中打开时,它无法运行。 有人知道怎么解决吗? 这是 fiddle h
我使用 DrawingManager 在 Google map 上绘制圆形和多边形。我尝试使用下面的代码删除圆形/多边形。 selectedShape.setMap(null); 这里selected
我看到了很多如何检测碰撞的教程,但没有看到如何解决它。我正在制作一个自上而下的游戏,玩家具有圆形碰撞形状,而墙壁是各种多边形。 我正在使用 slick2d。我应该做的是,如果玩家与角落碰撞,我会按法线
我对 tkinter 比较陌生,我正在制作一个只使用正方形的游戏。我正在抄写的书只显示三角形。这是代码: # The tkinter launcher (Already complete) from
我在 OpenCV/Python 中工作,我遇到了这个问题。我已经使用 cv2.minAreaRect() 来获取围绕一组点的边界框。是否有任何其他函数/通用算法可以给我内接多边形(点集)的最大矩形?
如果给定一组线段 S ,我们能否设计一种算法来测试集合 S 中的线段是否可以形成多边形,我对它们是否相交多边形不感兴趣,我只想知道我可以测试什么标准, 任何建议 最佳答案 构建一个图形数据结构,其中节
如何从多个地理位置(经度、纬度值)创建多边形地理围栏。此外,如何在 Android 上跟踪用户进入此地理围栏区域或从该区域退出。 最佳答案 地理围栏只是一组形成多边形的纬度/经度点。获得纬度/经度点列
我想要一个 complex image like this在我的申请中。我想让用户点击复杂的多边形(在这种情况下是有边界的国家/地区)并突出显示他们点击的多边形。我有我需要用于该状态的图像。 我怎样才
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我想在 python tkinter 中移动对象,特别是多边形。问题出在 is_click 函数中。我似乎无法弄清楚如何确定我是否单击了该对象。代码还没有 100% 完成,移动仍然需要完成,但我现在需
我有一个大多边形,我想找到与该多边形相交的要素,但由于多边形太大,我遇到超时异常。 我试图研究 JTS 方法,但不知道如何使用它。 final List coordinates = List.of(n
我是一名优秀的程序员,十分优秀!