首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >putImageData不会绘制到画布

putImageData不会绘制到画布
EN

Stack Overflow用户
提问于 2012-07-19 11:34:37
回答 1查看 2.3K关注 0票数 0

拆分平铺集http://mystikrpg.com/images/all_tiles.png之后

它仍然不会绘制到<canvas>上,我知道它会被放到tileData[]中,因为它在console.log(tileData[1])中输出ImageData。

代码语言:javascript
复制
$(document).ready(function () {

var tileWidth, tileHeight
ImageWidth = 736;
ImageHeight = 672;
tileWidth = 32;
tileHeight = 32;

    console.log("Client setup...");
    canvas = document.getElementById("canvas");
    canvas.width = 512;
    canvas.height = 352;
    context = canvas.getContext("2d");
    canvas.tabIndex = 0;
    canvas.focus();
    console.log("Client focused.");

    var imageObj = new Image();
    imageObj.src = "./images/all_tiles.png";
    imageObj.onload = function() {
    context.drawImage(imageObj, ImageWidth, ImageHeight);


    var allLoaded = 0;
    var tilesX = ImageWidth / tileWidth;
    var tilesY = ImageHeight / tileHeight;
    var totalTiles = tilesX * tilesY;        
    for(var i=0; i<tilesY; i++)
    {
      for(var j=0; j<tilesX; j++)
      {           
        // Store the image data of each tile in the array.
        tileData.push(context.getImageData(j*tileWidth, i*tileHeight, tileWidth, tileHeight));
        allLoaded++;
      }
    }


    if (allLoaded == totalTiles) {
    console.log("All done: " + allLoaded); // 483
    console.log(tileData[1]); // > ImageData
    startGame();
    }
    };

});

也是

代码语言:javascript
复制
var startGame = function () {

   console.log("Trying to paint test tile onto convas...");

    try {
    context.putImageData(tileData[0], 0, 0);
    } catch(e) {
        console.log(e);
    }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 11:58:40

当您最初将图像绘制到画布时,为什么:

代码语言:javascript
复制
context.drawImage(imageObj, ImageWidth, ImageHeight);

看起来你可能把参数搞混了,试图用ImageWidth,ImageHeight来填充这个区域……相反,将其绘制为0,0

代码语言:javascript
复制
context.drawImage(imageObj, 0, 0);

下面是您的代码进行了一些调整:

代码语言:javascript
复制
var tileData = [];

var tileWidth, tileHeight
var ImageWidth = 736;
var ImageHeight = 672;
var tileWidth = 32;
var tileHeight = 32;
var tilesX;
var tilesY
var totalTiles;
canvas = document.getElementById("canvas");
canvas.width = ImageWidth;
canvas.height = ImageHeight;
context = canvas.getContext("2d");

var imageObj = new Image();
imageObj.src = "all_tiles.png";
imageObj.onload = function() {
  context.drawImage(imageObj, 0, 0);
// draw the image to canvas so you can get the pixels context.drawImage(imageObj, 0, 0);

  tilesX = ImageWidth / tileWidth;
  tilesY = ImageHeight / tileHeight;
  totalTiles = tilesX * tilesY;
  for(var i=0; i<tilesY; i++) {
    for(var j=0; j<tilesX; j++) {
      // Store the image data of each tile in the array.

      tileData.push(context.getImageData(j*tileWidth, i*tileHeight, tileWidth, tileHeight));
    }
  }

  // test it...
  // blank the canvas and draw tiles back in random positions 
  context.fillStyle = "rgba(255,255,255,1)";
  context.fillRect(0,0,canvas.width, canvas.height);
  for ( i = 0; i < 20; i++ ) {
    context.putImageData(tileData[ i ], Math.random() * canvas.width, Math.random() * canvas.height );
  }

};

没有必要测试“全部加载”,因为它只是一个图像,您正在拆分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11553553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档