我正在努力解决如何将2色Floyd-Steinberg algol转换为X颜色算法的问题。 (索引?)
我看到计算必须来自这一行:
var rc = (cc<127?0:255);
目前根据灰度值选择黑白两种颜色。
所以我需要调整它以找出几个像素应该是哪种颜色。 我有一个想法,我认为LUT会最快?
newCol = greyscaleReduced[currentPixelGreyscale];
是吗?我是否需要以某种方式调整误差扩散?
function floydSteinberg8(sb, w, h){
for(var i=0; i<h-1; i++)
for(var j=0; j<w; j++){
var ci = i*w+j;
var cc = sb[ci];
var rc = (cc<127?0:255); // This one changed to
var rc = lockedGreyscale[cc];// this one
var err = cc-rc;
sb[ci] = rc;
sb[ci+1] += (err*7)>>4;
sb[ci+w-1] += (err*3)>>4;
sb[ci+w] += (err*5)>>4;
sb[ci+w+1] += (err*1)>>4;
}
}
修改 我一直在调整我的代码 - 这个算法好吗? 我认为indexedGreyscale中像素亮度的权重可能会被关闭? 这就是它 - 只是亮度的LUT!? (该程序需要按下播放按钮,抖动,并关闭颜色) http://codepen.io/SarahC/pen/xdKGYB?editors=0010