javascript - 添加 flaglike 挥舞到 2d 上下文

标签 javascript html canvas

我想制作一个以不同于平常的方式显示 2d 上下文的函数。有点像转换工作。我不想弯曲/改变上下文的大小,而是让它像波浪一样。这个想法是,这必须来自上下文,而不是来自数据图像。没有位操作。

此处完成了类似的请求:How to distort an image to create flag waving in the wind effect using html5 canvas但有位操作。

重点是通过减少位操作来提高性能。

编辑:我需要制作链接中描述的相同功能(上面的那个),但有一点不同。该链接已得到解答,因此您可以理解我的意思。在示例中,这是通过位操作执行的。我想做同样的事情,但从上下文的 Angular 来看。就像它用 context.transform(..) 函数完成的那样。

Context.transform 函数示例:http://www.html5canvastutorials.com/advanced/html5-canvas-custom-transform/ (你可以改变tranfsorm函数的参数来获得效果)

希望一切都过去了。

最佳答案

您可以使用 context.drawImage 绘制具有“波浪”y 偏移的 1 像素宽的垂直切片。

此方法可提供良好的性能,因为您是一次绘制图像的整个高度,而不是逐个像素地绘制。此外,绘图过程比像素操作快得多,因为所需的像素从图像传输到 Canvas 。当 GPU 可用时,此方法使用 GPU 加速。

enter image description here

示例代码和演示:http://jsfiddle.net/m1erickson/bcjmxr80/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    canvas{border:1px solid red;}
</style>
<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    var img=new Image();
    img.onload=start;
    img.src=document.getElementById("source").src;
    function start(){

        var iw=img.width;
        var ih=img.height;
        canvas.width=iw+100;
        canvas.height=ih+100;

        for(var x=0;x<310;x++){
            var y=5*Math.sin(x/10)+200-162;
            ctx.drawImage(img, x,0,1,ih,  x,y,1,ih);
        }

    }

}); // end $(function(){});
</script>
</head>
<body>
    <h4>Original Image</h4>
    <img id=source src="https://dl.dropboxusercontent.com/u/139992952/multple/usaFlag.png"><br>
    <h4>Wavy using vertical slices in canvas</h4>
    <canvas id="canvas"></canvas>
</body>
</html>

关于javascript - 添加 flaglike 挥舞到 2d 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25668914/

相关文章:

javascript - 关于node.js内部异步I/O机制的困惑

javascript - 对象无法正确复制

php - JQuery Ajax 仅在第一次请求时加载微调器

javascript - 为什么这 block Canvas 会不断增长? (动态调整 Canvas 大小)

javascript - 使用 CanvasJs 在图表的任何部分添加文本

javascript - 为什么我的输入表单 Canvas 图消失了?

javascript - 在DOJO确认对话框中动态设置onExecute回调函数

javascript - 我们正在从 .cache.html 文件加载 javascript,那么为什么我们不能从 .js 下载它呢?

css - HTML5 中的爱德华七世脚本到文本

javascript - 在 JQuery 中获取一个 Div 值