Add Dither Function
This commit is contained in:
parent
0cc15e9b4f
commit
c5a68ea94b
1 changed files with 33 additions and 0 deletions
|
@ -58,6 +58,39 @@ class Pixed {
|
|||
original.b - quantized.b,
|
||||
original.a);
|
||||
}
|
||||
|
||||
static PixelArray dither(PixelArray image) {
|
||||
PixelArray pxArr = new PixelArray.fromPixelArray(image);
|
||||
for (var y = 0; y < pxArr.getHeight()-1; y++) {
|
||||
for (var x = 1; x < pxArr.getWidth()-1; x++) {
|
||||
Pixel origPx = pxArr.getPixel(x, y);
|
||||
Pixel quantPx = _quantizePixel(origPx);
|
||||
Pixel errPx = _quantizeErrorPixel(origPx, quantPx);
|
||||
pxArr.setPixel(quantPx);
|
||||
|
||||
Pixel px = pxArr.getPixel(x+1, y);
|
||||
px.r = (px.r + errPx.r * (7/16)).toInt();
|
||||
px.g = (px.g + errPx.g * (7/16)).toInt();
|
||||
px.b = (px.b + errPx.b * (7/16)).toInt();
|
||||
|
||||
px = pxArr.getPixel(x-1, y+1);
|
||||
px.r = (px.r + errPx.r * (3/16)).toInt();
|
||||
px.g = (px.g + errPx.g * (3/16)).toInt();
|
||||
px.b = (px.b + errPx.b * (3/16)).toInt();
|
||||
|
||||
px = pxArr.getPixel(x, y+1);
|
||||
px.r = (px.r + errPx.r * (5/16)).toInt();
|
||||
px.g = (px.g + errPx.g * (5/16)).toInt();
|
||||
px.b = (px.b + errPx.b * (5/16)).toInt();
|
||||
|
||||
px = pxArr.getPixel(x+1, y+1);
|
||||
px.r = (px.r + errPx.r * (1/16)).toInt();
|
||||
px.g = (px.g + errPx.g * (1/16)).toInt();
|
||||
px.b = (px.b + errPx.b * (1/16)).toInt();
|
||||
}
|
||||
}
|
||||
return pxArr;
|
||||
}
|
||||
}
|
||||
|
||||
class Pixel {
|
||||
|
|
Loading…
Reference in a new issue