putImageData () на повернутом холсте работает некорректно - PullRequest
7 голосов
/ 03 октября 2011

Мне нужно нарисовать повернутое изображение на холсте.(Это проект gwt, и контекст является экземпляром com.google.gwt.canvas.dom.client.Context2d)

Я пытаюсь использовать для этого следующий код:

context.rotate(rotation);
context.putImageData(data, x, y);
context.rotate(-rotation);

, ноэто нарисовать не повернутое изображение.Если я изменю код следующим образом

context.rotate(rotation);
context.fillRect(x, y, 100, 50);
context.rotate(-rotation);

, повернутый прямоугольник будет нарисован на холсте.Это ошибка API или моя ошибка?Что я могу сделать, чтобы исправить это?

Отредактировано Я пытаюсь использовать drawImage () с каким-то другим изображением вместо putImageDate (), чтобы проверить, как это работает.Работает с вращением нормально.Но мне нужно нарисовать ImageData, а не взять другой холст.Есть ли быстрые методы для перевода ImageData в ImageElement?В каких единицах ImageData возвращает свой размер?

1 Ответ

12 голосов
/ 03 октября 2011

putImageData не зависит от матрицы преобразования.

Это по приказу Спека:

Текущий путь, матрица преобразования, атрибуты тени, глобальная альфа, область отсечения и глобальный оператор композиции не должны влиять на методы getImageData () и putImageData ().

Что вы можете сделать, это putImageData на холст в памяти, а затем

context.rotate(rotation);
context.drawImage(inMemoryCanvas, x, y)
context.rotate(-rotation);

на ваш обычный холст.

ПРИМЕЧАНИЕ: из ваших правок вы, похоже, подразумеваете, что вы можете просто рисовать с одного холста на другой, не меняя никаких изображений. Если это так, определенно просто используйте drawImage(othercanvas, x, y) вместо использования getImageData и putImageData, если это возможно. Использование drawImage намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...