【发布时间】:2011-05-17 14:22:44
【问题描述】:
使用putImageData 将像素写入 HTML Canvas 上下文时,我发现再次获取像素值时它们并不完全相同。我已经提出了一个sample test page 来显示这个问题。归根结底,问题是:
var id = someContext.getImageData(0,0,1,1);
id.data[0]=id.data[3]=64; // 25% red, 25% alpha
id.data[1]=id.data[2]=0; // No blue or green
someContext.putImageData(id,0,0);
var newData = someContext.getImageData(0,0,1,1);
console.log( newData.data[0] );
在 Chrome v8 上,红色值返回为 63;在 Firefox v3.6、Safari v5 和 IE9 上,红色值返回为 67(全部在 Windows 上)。在 OS X 上,Chrome v7、Safari v5 和 Firefox v3.6 也返回为 67。它们都不会像最初设置的 64 值一样返回!
使用setTimeout 在设置和重新获取之间进行延迟没有区别。更改页面的背景没有任何区别。在上下文中使用save() 和restore()(根据this unlikely article)没有区别。
【问题讨论】:
-
我已经建立了另一个显示effects of alpha on a set/returned value的测试页面。 alpha 越低,结果的差异越大。设置
R:5 G:0 B:0 A:1返回为R:255 G:0 B:0 A:1。 -
你有没有解决过这个问题?
-
@Billy 不;甚至 HTML5 规范也有关于 set/get 可能导致不同值的事实的注释(请参阅下面我评论中的链接)。
标签: javascript html canvas