У меня есть простая задача - мне нужно нарисовать один прямоугольник, повернуть и скопировать его и клонировать его повернутую версию. Я стараюсь сделать это так:Поверните рисунок на холсте
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
//1. rotate canvas
ctx.rotate(-30 * Math.PI/180);
ctx.rect(10, 60, 80, 40);
ctx.stroke();
//2. copy rotated rectangle
var img = ctx.getImageData(0, 0, 140, 140);
//3. rotate back
ctx.rotate(30 * Math.PI/180);
//4. draw rotated version of the rectangle
ctx.putImageData(img, 80, 100);
Идея очень проста. На первом шаге я рисую прямоугольник, на втором шаге поворачиваю свой холст и делаю то, что, по моему мнению, является снимком (или создаю копию моего повернутого прямоугольника), на третьем шаге поворачиваю свой холст назад (так что мой повернутый прямоугольник должен больше не поворачиваться), и на последнем шаге я добавляю новый объект к холсту - копию повернутого прямоугольника. Но это то, что я получаю:
В то время как я ожидал, чтобы получить эту картину:
Что я делаю неправильно и как я могу получить желаемый результат?
Когда первый вращающийся вы на самом деле рисунок коробку. В '// 3. поворачивайте назад, вы вращаетесь, но ничего не делаете с ним, чтобы нарисовать его на холсте. https://jsfiddle.net/jr3g9cyk/1/ – PeeHaa
Ну, вы рисуете прямоугольники два раза. Но я хочу нарисовать его один раз и клонировать его с помощью getImageData. – Jacobian
Это строгое требование использовать getImageData. Уловкой я просто упростил свой вопрос двумя прямоугольниками, но в реальном мире ситуация намного хуже - может быть какой-то раскрашенный фон с разными рисунками. Я хочу повернуть этот фон, создать кусок из него, а затем нарисовать этот фрагмент на другой координате. – Jacobian