context.drawImage不正确的像素数据

时间:2016-09-25 21:49:39

标签: javascript html5 image-processing html5-canvas

我创建了一个脚本,使用带有ctx.drawImage(img, 0, 0)的{​​{1}}从PNG图像获取像素数据,以便从PICO-8 cartridges中提取数据。图像为160x205,一些像素的RGBA值不正确。我已经确定将画布渲染到ctx.getImageData(0, 0, imgWidth, imgHeight).data并将图像保存为不正确地将这些像素实际绘制到画布上。

您可以在此处查看脚本演示:http://clowerweb.com/picoder-test/,其中我突出显示了错误。原始/预期数据在右侧,解码数据在左侧。在页面底部,我将图像渲染到画布(左侧)和原始图像文件(右侧)。你不能通过观察两者来区分它们,但RGBA值约有6个像素存在细微差别(如演示中所示)。

注意:仅适用于Chrome,Edge和基于Webkit的浏览器。 IE11和Firefox错误地解码数据(可能是由于没有使用document.body的UInt8数组缓冲区;可能是16-32位缓冲区 - 无论如何都是我的理论),但这并不是一个问题目前。 主要关注的是,某些像素被错误地绘制到画布上。

如果无法修复画布错误,是否有另一种方法可以从图像中提取RBGA数据作为UInt8值?

我还向Chromium提交了有关此问题的错误报告。该报告包含原始图像和通过画布输出的一个 - 如您所见,它们甚至是不同的文件大小:https://bugs.chromium.org/p/chromium/issues/detail?id=650110

0 个答案:

没有答案