【发布时间】:2013-12-09 16:16:11
【问题描述】:
通过 websocket,我以 PNG 格式 (something like that) 检索图像的二进制缓冲区。
我想将此PNG缓冲区加载到画布中,然后读取不同的像素以读取未压缩的数据。
我设法做到了,但这很愚蠢:
function onBinaryMessage(/*ArrayBuffer*/ input) {
input = new Uint8Array(input);
var str = '';
for (var i = 0; i < input.byteLength; i++)
str = str + String.fromCharCode(input[i]);
var image = document.getElementById("image");
image.src = 'data:image/png;base64,' + btoa(str);
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
ctx.drawImage(image, 0, 0);
var imgData = ctx.getImageData(0, 0, image.width, image.height);
console.log(imgData);
}
我必须将我的二进制文件转换成一个字符串来对这个字符串进行编码64,然后我将我的图像src影响到这个新创建的编码64字符串...... 浏览器必须重新将此编码的 64 数据转换为我得到的原始 PNG 缓冲区...
有没有办法直接设置画布缓冲区? 或者有什么方法可以更好地处理流媒体?
我想我可以使用 File API 将缓冲区写入临时文件,但创建文件会花费很多:(
有什么建议吗?
【问题讨论】:
标签: javascript html streaming html5-canvas buffer