Создание объекта CanvasImageData без экземпляра canvas в JS - PullRequest
5 голосов
/ 08 октября 2011

Я новичок в Javascript. Я выполняю некоторую обработку изображений с использованием canvas и пытаюсь создать новый объект CanvasImageData без фактической ссылки на определенный Canvas.

т.

oImageData = CanvasRenderingContext2D.createImageData(vCSSWidth, vCSSHeight)

(из MSDN)

    // Why can't I write:
    var image_data = CanvasRenderingContext2D.createImageData(50, 50);
    // or:
    var image_data = CanvasRenderingContext2D.prototype.createImageData(50, 50);
    // ?

    // Instead I must do:
    var canvas = document.createElement("canvas");
    var image_data = canvas.createImageData(50, 50);

Есть ли способ сделать это без экземпляра Canvas? Если нет, то почему?

Спасибо!

1 Ответ

3 голосов
/ 08 октября 2011

Вы, безусловно, можете ссылаться createImageData на объект-прототип интерфейса:

CanvasRenderingContext2D.prototype.createImageData.call({ }, 100, 100); // ImageData

Однако в некоторых средах (например, WebKit) добавляются ограничения на тип объекта, в контексте которого createImageDataдолжен вызываться метод (и, вероятно, другие):

CanvasRenderingContext2D.prototype.createImageData.call({ }, 100, 100); // TypeError: Illegal invocation

Это работает по крайней мере в Firefox по ночам (только что отмечен).

Напоминает мне об ограничении контекста в другом WebKit с помощью console.log:

console.log.call({ }, 1); // TypeError: Illegal invocation
console.log.call(console, 1); // logs 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...