我是Java的新手。我正在使用 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实例,有没有办法做到这一点?如果没有,为什么?
谢谢!
最佳答案
您当然可以从接口(interface)原型(prototype)对象中引用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