【问题标题】:render a HTML canvas inside a canvas在画布内渲染 HTML 画布
【发布时间】:2012-01-19 15:06:02
【问题描述】:

我需要解决一个复杂的情况,我已经有一个Canvas element 用某种文本行等渲染。我不知道它是如何渲染的以及以何种方式渲染的。但现在我需要设置旋转、缩放等的转换。

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

var angle1 = 0.1;
var angle2 = 0.14;
var cs = Math.cos(angle1), sn = Math.sin(angle1);
var h = Math.cos(angle2);

var a = 100*cs, b = -100*sn, c = 200;
var d = h*100*sn, e = h*100*cs, f = 200;

ctx.setTransform(a, d, b, e, c, f);

当我设置变换或任何东西时,画布被清除并需要重新绘制,但我不知道第一次绘制的确切机制。为了解决这个问题,我想到了在另一个画布中渲染一个画布,这样初始画布就不需要以任何方式呈现。我们可以设置第二个画布的变换。

我该怎么做?

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    如果您将一个(位图)画布渲染到另一个(使用drawImage())只是为了引入转换,您将得到糟糕的结果。这是因为画布的结果不是矢量,而是像素。

    您需要在第一个画布上下文中捕获和记录绘图命令,以便稍后在转换后的上下文中重播它们。

    【讨论】:

    • 我通过库html2canvas.hertzen.com 获得了第一个画布,所以为什么我不完全知道它是如何渲染的,也不想挖掘它。正如你所说的drawImage,你能给我举个例子吗?
    • 我已链接到 drawImage() 的规范。
    • 非常感谢。你能不能给我建议一些会扭曲和倾斜图像的变换。