javascript - 无法转换 CanvasRenderingContext2D.drawImage 的参数 1(尝试在 Canvas 对象上绘制图像)

标签 javascript html canvas

我正在尝试制作可与 canvas.drawImage() 一起使用以显示图像但只绘制一次的对象缓存。我不断收到此错误,我尝试了一些在线找到的答案,例如:canvasObject.get(0) and canvasObject[0] and unwrap(canvasObject) 在将它们放入绘图上下文之前,但都没有作品。我在上面找不到任何东西。希望有人可以提供帮助。这是我的代码:

var canvas = full canvas that cached drawings should draw to
var temp = {};
var h = heightOfGridSquare; 
var w = widthOfGridSquare;

 var canvasElementForCache = document.createElement('canvas');
 canvasElementForCache.width = w * 2; // so that i can draw pictures larger then single grid square
 canvasElementForCache.height = h * 2;
 var cachedCanvas = canvasElementForCache.getContext(ctx);

// cache drawing in app object
var cacheDrawing = function ( name ){
    app.cache[name] = objectRepo[name](cachedCanvas);
};

var objectRepo = {
    someObjectName: function (canv) {
        var m = temp.coordinates;
        canv.fillStyle = "rgba(0,0,200,0.9)";
        canv.fillRect(m.x + 25, m.y + 25,50, 50); // random filler (x and y are coordinates defined in the draw object funciton )
        return canv;
    },
};

var drawObejectAtCoordinates = function ( x, y ) {
     var px = ( x - ( w / 2 ));
     var py = ( y + ( h / 2 ));
     if ( app.cache[name] === undefined ){
            temp.coordinates = { x:px, y:py };
            cacheDrawing(name);
     }
     // drawing on actual canvas
     canvas.drawImage( app.cache[name], px, py );
};

var render = function () {
    drawObejectAtCoordinates( coordinateX, coordinateY );


  // this is just a place holder, my actual code is very long and has different rendering methods.. 
  // just know that it is being rendered ( not super important though since the error occurs at drawImage not render ) 
    window.requestAnimationFrame(render);
}

这大部分是准确的,为简洁起见,我更改了小部分。但没有遗漏任何与我遇到的问题相关的内容。如果有人可以提供帮助,我将不胜感激!

错误信息是:

TypeError: Argument 1 of CanvasRenderingContext2D.drawImage could not be converted to any of: HTMLImageElement, HTMLCanvasElement, HTMLVideoElement.

当我控制台记录缓存 Canvas 对象的内容时,它看起来像这样:

CanvasRenderingContext2D { canvas: <canvas>, globalAlpha: 1, globalCompositeOperation: "source-over", strokeStyle: "#41471d", fillStyle: "#ff8800", shadowOffsetX: 0, shadowOffsetY: 0, shadowBlur: 0, shadowColor: "rgba(0, 0, 0, 0)", mozCurrentTransform: Array[6] }

这是一个 jsFiddle 示例:https://jsfiddle.net/1krgqeq7/3/

最佳答案

这里有很多问题使得这段代码很难理解:

1) 您正在以一种令人困惑的方式重用变量 cachedDrawing(它是元素还是函数?)

2) 你使用了一个名为 temp 的变量,这通常是一种代码味道,尤其是当你没有在它的声明附近使用它时(不存在于代码中)样本)。也不清楚为什么你的藏匿坐标。

3) 您使用了相当数量的描述性变量名称,但除了 temp 之外,您还使用了相当非描述性的“obj”

但您的问题(与上述 1 相关)的答案是您传递的是上下文,而不是它的来源 Canvas 。不要重新分配该 var 并将其传递到缓存中。

使用更具描述性的变量名称(如 cachedCanvas 是 Canvas ,cachedCtx 是其上下文)可能更容易发现此类问题。

关于javascript - 无法转换 CanvasRenderingContext2D.drawImage 的参数 1(尝试在 Canvas 对象上绘制图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037502/

相关文章:

html - HTML5 <command> 标签到底是什么,浏览器支持什么

javascript - 如何使用JS合成正弦音频波?

php - 如何摆脱 PHP Mysql Ajax 中的转义字符

javascript - 根据页面中的某些条件插入CSS

javascript - 理解 Javascript Typeof

html - 在 Sinatra 表单中格式化日期字段

javascript - 可以填充数组

python - 在 tkinter(Python) 中获取在 Canvas 中绘制的项目的填充颜色或任何其他属性

javascript - 使用 html Canvas 和 JS 操作图像上的像素数据

javascript - 在 PhP 中运行 javascript 警报