【问题标题】:Displaying images in html5 canvas from binary data从二进制数据在 html5 画布中显示图像
【发布时间】:2013-07-26 14:56:17
【问题描述】:

我正在尝试通过 google 应用引擎通道 api 从画布将图像发送到另一个客户端,然后该客户端将显示相同的图像。正在接收消息,但未显示图像。

发送方:

var image = context.getImageData(0, 0, imageCanvas.width, imageCanvas.height);
var buffer = new ArrayBuffer(image.data.length);
var bytes = new Uint8Array(buffer);
for (var i=0; i<bytes.length; i++) {
    bytes[i] = image.data[i];
}

sendMessage({image: buffer});

在另一端渲染数据:

var bytes = new Uint8Array(buffer.size);
var image = context.createImageData(imageCanvas.width, imageCanvas.height);
for (var i=0; i<image.length; i++) {
    image.data[i] = bytes[i];
}
context.drawImage(image, 0, 0);

控制台一直说最后一行有一个类型错误

【问题讨论】:

    标签: javascript google-app-engine python-2.7 html5-canvas channel-api


    【解决方案1】:

    用 putImageData 交换 drawImage

    createImageData() 返回一个 ImageData 对象。

    http://tinker.io/e3ec8

    你这里也有一个错误: for (var i=0; i&lt;image.length; i++) {
    你想要image.data.length 而不是图像长度

    【讨论】:

    • 感谢您的回复。我不再收到类型错误。但是图像仍然没有在画布中绘制。
    • 谢谢你,但我认为肯定有另一个错误,它仍然无法正常工作......
    • @AlecHewitt 好的,如果你能写一个新问题,我们可以单独处理这个问题(提示:它与你这里的代码无关)。见:tinker.io/e3ec8/1
    • 感谢您对这个问题的帮助。从那以后,我采用了一种稍微不同的方法,使用方法 toDataURL()。这具有在同一页面上的画布之间工作但在我尝试将其发送到服务器时产生“InvalidMessageError”的优势。正如你所建议的,我创建了一个新问题,可以在这里看到:stackoverflow.com/questions/17958052/…
    猜你喜欢
    • 2012-03-21
    • 2012-08-22
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多