【问题标题】:Write from one fixed canvas to another floating从一个固定画布写入另一个浮动
【发布时间】:2017-04-17 19:57:25
【问题描述】:

我有一个带有变换矩阵的 imageCanvas

Image = new image();
image.src = //stuff; 
imageContext.drawImage(Image, 0, 0);
var t = imageContext.currentTransform;

在另一个画布上绘制

context.drawImage(imageCanvas, 0, 0);

我在上面画线

context.moveTo(mousePos.X, mousePos.Y);
context.lineTo(currentPos.X, currentPos.Y);
context.stroke();

我将我的线条保存到对象“线条”的向量中。 我想将这两个图层加入到“图像”中,但此功能仅适用于平移,不适用于旋转和缩放。

var saveCanvas = document.createElement('canvas');
var saveContext = saveCanvas.getContext('2d');

saveCanvas.width = Image.width;
saveCanvas.height = Image.height;

saveContext.drawImage(Image,0,0);

saveContext.save();
var t = imageContext.currentTransform;
saveContext.setTransform(1,0,0,1,-t.e,-t.f);

for(var i = 0; i < lines.length; i++){
    saveContext.beginPath();
    saveContext.moveTo(lines[i].from.X, lines[i].from.Y);
    saveContext.lineTo(lines[i].to.X, lines[i].to.Y);
    saveContext.stroke();
}
saveContext.restore();

Image.src = saveCanvas.toDataURL();

如何修改'setTransform'的参数来解决问题?

【问题讨论】:

    标签: javascript html image canvas transform


    【解决方案1】:

    只需使用其余的转换属性即可。

    var t = imageContext.currentTransform;
    saveContext.setTransform(
       t.a,
       t.b,
       t.c,
       t.d,
      -t.e,
      -t.f);
    

    【讨论】:

    • 不,但我刚刚解决了。 var m = [[t.a,t.c,t.e],[t.b,t.d,t.f],[0,0,1]]; m = 数学.inv(m); saveContext.setTransform(m[0][0],m[1][0],m[0][1],m[1][1],m[0][2],m[1][2 ]);
    • @Simone 知道您想要逆矩阵会有所帮助。你也可以通过t.inverse()得到逆矩阵。
    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 2015-08-12
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多