@opendisplay/epaper-dithering 2.1.4 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -123
- package/dist/index.cjs +262 -206
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +45 -22
- package/dist/index.d.ts +45 -22
- package/dist/index.js +255 -207
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/enums.ts","../src/palettes.ts","../src/algorithms.ts","../src/core.ts","../src/index.ts"],"names":["DitherMode","ColorScheme"],"mappings":";;;AAIO,IAAK,UAAA,qBAAAA,WAAAA,KAAL;AACL,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,qBAAkB,CAAA,CAAA,GAAlB,iBAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,yBAAsB,CAAA,CAAA,GAAtB,qBAAA;AATU,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;;;ACEL,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AACL,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,CAAA,CAAA,GAAN,KAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,CAAA,CAAA,GAAN,KAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AANU,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AASZ,IAAM,QAAA,GAA8C;AAAA,EAClD,CAAC,eAAmB;AAAA,IAClB,MAAA,EAAQ;AAAA,MACN,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC1B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA;AAAI,KAClC;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,cAAkB;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC1B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,MAChC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AAAE,KAC5B;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,cAAkB;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC1B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,MAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAAE,KACjC;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,eAAmB;AAAA,IAClB,MAAA,EAAQ;AAAA,MACN,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC1B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,MAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MAC/B,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AAAE,KAC5B;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,iBAAqB;AAAA,IACpB,MAAA,EAAQ;AAAA,MACN,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC1B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,MAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MAC/B,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC1B,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,MAC3B,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAAE,KAC9B;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,sBAA0B;AAAA,IACzB,MAAA,EAAQ;AAAA,MACN,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC1B,OAAO,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,MAC7B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,MAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA;AAAI,KAClC;AAAA,IACA,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAKO,SAAS,WAAW,MAAA,EAAmC;AAC5D,EAAA,OAAO,SAAS,MAAM,CAAA;AACxB;AAKO,SAAS,cAAc,MAAA,EAA6B;AACzD,EAAA,OAAO,OAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA;AAC9C;AAKO,SAAS,UAAU,KAAA,EAA4B;AACpD,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAK,CAAA,CAAE,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,KAAA;AACT;;;ACtFO,SAAS,iBAAiB,MAAA,EAA4B;AAC3D,EAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC;AAKO,SAAS,uBAAA,CAAwB,KAAU,OAAA,EAAwB;AACxE,EAAA,IAAI,WAAA,GAAc,QAAA;AAClB,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,GAAA,GAAM,QAAQ,CAAC,CAAA;AAErB,IAAA,MAAM,QAAA,GAAA,CACH,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,MAAM,CAAA,GAAA,CAAK,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,CAAA,KAAM,CAAA,GAAA,CAAK,GAAA,CAAI,CAAA,GAAI,IAAI,CAAA,KAAM,CAAA;AAEnE,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,WAAA,GAAc,QAAA;AACd,MAAA,UAAA,GAAa,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAcA,SAAS,oBAAA,CACP,KAAA,EACA,WAAA,EACA,MAAA,EACoB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAG5C,EAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,KAAA,GAAQ,SAAS,CAAC,CAAA;AAClD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,GAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAA,CAAO,IAAI,CAAC,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAChC,IAAA,MAAA,CAAO,CAAA,GAAI,IAAI,CAAC,CAAA,GAAI,MAAM,IAAA,CAAK,CAAA,GAAI,IAAI,CAAC,CAAA;AACxC,IAAA,MAAA,CAAO,CAAA,GAAI,IAAI,CAAC,CAAA,GAAI,MAAM,IAAA,CAAK,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,KAAA,GAAQ,MAAM,CAAA;AAE7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,MAAM,GAAA,GAAM,IAAI,KAAA,GAAQ,CAAA;AACxB,MAAA,MAAM,WAAW,GAAA,GAAM,CAAA;AAGvB,MAAA,MAAM,QAAA,GAAgB;AAAA,QACpB,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,QAC9B,GAAG,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAA,GAAW,CAAC,CAAC,CAAA;AAAA,QAClC,GAAG,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAA,GAAW,CAAC,CAAC;AAAA,OACpC;AAGA,MAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,QAAA,EAAU,OAAO,CAAA;AACxD,MAAA,MAAM,QAAA,GAAW,QAAQ,MAAM,CAAA;AAC/B,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAGf,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAA,GAAI,QAAA,CAAS,CAAA;AACrC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAA,GAAI,QAAA,CAAS,CAAA;AACrC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAA,GAAI,QAAA,CAAS,CAAA;AAGrC,MAAA,KAAA,MAAW,EAAE,EAAA,EAAI,EAAA,EAAI,MAAA,MAAY,MAAA,EAAQ;AACvC,QAAA,MAAM,KAAK,CAAA,GAAI,EAAA;AACf,QAAA,MAAM,KAAK,CAAA,GAAI,EAAA;AAEf,QAAA,IAAI,MAAM,CAAA,IAAK,EAAA,GAAK,SAAS,EAAA,IAAM,CAAA,IAAK,KAAK,MAAA,EAAQ;AACnD,UAAA,MAAM,WAAA,GAAA,CAAe,EAAA,GAAK,KAAA,GAAQ,EAAA,IAAM,CAAA;AACxC,UAAA,MAAA,CAAO,WAAW,KAAK,MAAA,GAAS,MAAA;AAChC,UAAA,MAAA,CAAO,WAAA,GAAc,CAAC,CAAA,IAAK,MAAA,GAAS,MAAA;AACpC,UAAA,MAAA,CAAO,WAAA,GAAc,CAAC,CAAA,IAAK,MAAA,GAAS,MAAA;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAQ;AAC3C;AAKO,SAAS,gBAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,KAAA,GAAQ,MAAM,CAAA;AAE7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,GAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,GAAA,GAAW;AAAA,MACf,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAAA,MACnB,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,MACvB,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,GAAI,IAAI,CAAC;AAAA,KACzB;AACA,IAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,uBAAA,CAAwB,GAAA,EAAK,OAAO,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAQ;AAC3C;AAKO,SAAS,aAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,WAAA,GAAc,IAAI,UAAA,CAAW;AAAA,IACjC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,EAAA;AAAA,IAAI,EAAA;AAAA,IAAI,CAAA;AAAA,IAAG,EAAA;AAAA,IAAI,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,EAAA;AAAA,IAAI,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,EAAA;AAAA,IAAI,CAAA;AAAA,IAAG,EAAA;AAAA,IAAI;AAAA,GACpD,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,EAAE,CAAA;AAEpB,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,KAAA,GAAQ,MAAM,CAAA;AAE7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,MAAM,GAAA,GAAM,IAAI,KAAA,GAAQ,CAAA;AACxB,MAAA,MAAM,UAAU,GAAA,GAAM,CAAA;AAGtB,MAAA,MAAM,YAAY,WAAA,CAAa,CAAA,GAAI,CAAA,GAAK,CAAA,GAAK,IAAI,CAAE,CAAA;AAGnD,MAAA,MAAM,GAAA,GAAW;AAAA,QACf,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,MAAM,IAAA,CAAK,OAAO,CAAA,GAAI,SAAS,CAAC,CAAC,CAAA;AAAA,QACzE,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,OAAA,GAAU,CAAC,CAAA,GAAI,SAAS,CAAC,CAAC,CAAA;AAAA,QAC7E,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,OAAA,GAAU,CAAC,CAAA,GAAI,SAAS,CAAC,CAAC;AAAA,OAC/E;AAEA,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,uBAAA,CAAwB,GAAA,EAAK,OAAO,CAAA;AAAA,IACrD;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAQ;AAC3C;AAQO,SAAS,YAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,KAAK,GAAA,EAAI;AAAA,IACjC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,KAAK,GAAA,EAAI;AAAA,IACjC,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,GAAA,EAAI;AAAA,IACjC,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,KAAK,GAAA,EAAI;AAAA,IAClC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,KAAK,GAAA,EAAI;AAAA,IACjC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,KAAK,GAAA,EAAI;AAAA,IACjC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,GAAA;AAAI,GAClC;AAEA,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACxD;AASO,SAAS,oBAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA;AAAG,GACjC;AAEA,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACxD;AASO,SAAS,YAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA;AAAG,GACjC;AAEA,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACxD;AASO,SAAS,gBAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,IAC9B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA;AAAE,GAChC;AAEA,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACxD;AAUO,SAAS,cAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,IAC9B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,IAC9B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,IAC9B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,IAC9B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA;AAAE,GAChC;AAEA,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACxD;AAUO,SAAS,YAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA;AAAG,GACjC;AAEA,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACxD;AAUO,SAAS,uBAAA,CACd,OACA,WAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAChC,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA,EAAG;AAAA,IAC/B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,EAAA;AAAG,GACjC;AAEA,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACxD;;;AC9TO,SAAS,WAAA,CACd,KAAA,EACA,WAAA,EACA,IAAA,GAAA,CAAA,eACoB;AACpB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAA,CAAA;AACE,MAAA,OAAkB,gBAAA,CAAiB,OAAO,WAAW,CAAA;AAAA,IACvD,KAAA,CAAA;AACE,MAAA,OAAkB,aAAA,CAAc,OAAO,WAAW,CAAA;AAAA,IACpD,KAAA,CAAA;AACE,MAAA,OAAkB,oBAAA,CAAqB,OAAO,WAAW,CAAA;AAAA,IAC3D,KAAA,CAAA;AACE,MAAA,OAAkB,cAAA,CAAe,OAAO,WAAW,CAAA;AAAA,IACrD,KAAA,CAAA;AACE,MAAA,OAAkB,YAAA,CAAa,OAAO,WAAW,CAAA;AAAA,IACnD,KAAA,CAAA;AACE,MAAA,OAAkB,YAAA,CAAa,OAAO,WAAW,CAAA;AAAA,IACnD,KAAA,CAAA;AACE,MAAA,OAAkB,gBAAA,CAAiB,OAAO,WAAW,CAAA;AAAA,IACvD,KAAA,CAAA;AACE,MAAA,OAAkB,uBAAA,CAAwB,OAAO,WAAW,CAAA;AAAA,IAC9D,KAAA,CAAA;AAAA,IACA;AACE,MAAA,OAAkB,YAAA,CAAa,OAAO,WAAW,CAAA;AAAA;AAEvD;;;AClCO,IAAM,OAAA,GAAU","file":"index.cjs","sourcesContent":["/**\n * Dithering algorithm modes\n * Values match firmware conventions (0-8)\n */\nexport enum DitherMode {\n NONE = 0,\n BURKES = 1,\n ORDERED = 2,\n FLOYD_STEINBERG = 3,\n ATKINSON = 4,\n STUCKI = 5,\n SIERRA = 6,\n SIERRA_LITE = 7,\n JARVIS_JUDICE_NINKE = 8,\n}","import type { RGB, ColorPalette } from './types';\n\n/**\n * E-paper display color schemes\n * Values match firmware conventions (0-5)\n */\nexport enum ColorScheme {\n MONO = 0,\n BWR = 1,\n BWY = 2,\n BWRY = 3,\n BWGBRY = 4,\n GRAYSCALE_4 = 5,\n}\n\nconst PALETTES: Record<ColorScheme, ColorPalette> = {\n [ColorScheme.MONO]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.BWR]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n },\n accent: 'yellow',\n },\n [ColorScheme.BWRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWGBRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n blue: { r: 0, g: 0, b: 255 },\n green: { r: 0, g: 255, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.GRAYSCALE_4]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 85, g: 85, b: 85 },\n gray2: { r: 170, g: 170, b: 170 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n};\n\n/**\n * Get color palette for a color scheme\n */\nexport function getPalette(scheme: ColorScheme): ColorPalette {\n return PALETTES[scheme];\n}\n\n/**\n * Get number of colors in a color scheme\n */\nexport function getColorCount(scheme: ColorScheme): number {\n return Object.keys(PALETTES[scheme].colors).length;\n}\n\n/**\n * Create ColorScheme from firmware integer value\n */\nexport function fromValue(value: number): ColorScheme {\n if (value < 0 || value > 5) {\n throw new Error(`Invalid color scheme value: ${value}`);\n }\n return value as ColorScheme;\n}","import type { RGB, ImageBuffer, PaletteImageBuffer } from './types';\nimport { ColorScheme, getPalette } from './palettes';\n\n/**\n * Get RGB palette colors from color scheme\n */\nexport function getPaletteColors(scheme: ColorScheme): RGB[] {\n const palette = getPalette(scheme);\n return Object.values(palette.colors);\n}\n\n/**\n * Find closest palette color using Euclidean distance\n */\nexport function findClosestPaletteColor(rgb: RGB, palette: RGB[]): number {\n let minDistance = Infinity;\n let closestIdx = 0;\n\n for (let i = 0; i < palette.length; i++) {\n const pal = palette[i];\n // Euclidean distance in RGB space\n const distance =\n (rgb.r - pal.r) ** 2 + (rgb.g - pal.g) ** 2 + (rgb.b - pal.b) ** 2;\n\n if (distance < minDistance) {\n minDistance = distance;\n closestIdx = i;\n }\n }\n\n return closestIdx;\n}\n\n/**\n * Error diffusion kernel entry\n */\ninterface ErrorKernel {\n dx: number;\n dy: number;\n weight: number;\n}\n\n/**\n * Apply error diffusion dithering with specified kernel\n */\nfunction errorDiffusionDither(\n image: ImageBuffer,\n colorScheme: ColorScheme,\n kernel: ErrorKernel[]\n): PaletteImageBuffer {\n const { width, height } = image;\n const palette = getPaletteColors(colorScheme);\n\n // Convert RGBA to RGB float array for error accumulation\n const pixels = new Float32Array(width * height * 3);\n for (let i = 0; i < width * height; i++) {\n pixels[i * 3] = image.data[i * 4]; // R\n pixels[i * 3 + 1] = image.data[i * 4 + 1]; // G\n pixels[i * 3 + 2] = image.data[i * 4 + 2]; // B\n }\n\n const indices = new Uint8Array(width * height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const idx = y * width + x;\n const pixelIdx = idx * 3;\n\n // Get old pixel (truncate, no clamping - matches Python behavior)\n const oldPixel: RGB = {\n r: Math.trunc(pixels[pixelIdx]),\n g: Math.trunc(pixels[pixelIdx + 1]),\n b: Math.trunc(pixels[pixelIdx + 2]),\n };\n\n // Find closest palette color\n const newIdx = findClosestPaletteColor(oldPixel, palette);\n const newPixel = palette[newIdx];\n indices[idx] = newIdx;\n\n // Calculate quantization error\n const errorR = oldPixel.r - newPixel.r;\n const errorG = oldPixel.g - newPixel.g;\n const errorB = oldPixel.b - newPixel.b;\n\n // Distribute error to neighbors using kernel\n for (const { dx, dy, weight } of kernel) {\n const nx = x + dx;\n const ny = y + dy;\n\n if (nx >= 0 && nx < width && ny >= 0 && ny < height) {\n const neighborIdx = (ny * width + nx) * 3;\n pixels[neighborIdx] += errorR * weight;\n pixels[neighborIdx + 1] += errorG * weight;\n pixels[neighborIdx + 2] += errorB * weight;\n }\n }\n }\n }\n\n return { width, height, indices, palette };\n}\n\n/**\n * Direct palette mapping without dithering (NONE)\n */\nexport function directPaletteMap(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const { width, height } = image;\n const palette = getPaletteColors(colorScheme);\n const indices = new Uint8Array(width * height);\n\n for (let i = 0; i < width * height; i++) {\n const rgb: RGB = {\n r: image.data[i * 4],\n g: image.data[i * 4 + 1],\n b: image.data[i * 4 + 2],\n };\n indices[i] = findClosestPaletteColor(rgb, palette);\n }\n\n return { width, height, indices, palette };\n}\n\n/**\n * Ordered dithering using 4x4 Bayer matrix\n */\nexport function orderedDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const bayerMatrix = new Uint8Array([\n 0, 8, 2, 10, 12, 4, 14, 6, 3, 11, 1, 9, 15, 7, 13, 5,\n ]).map((v) => v * 16);\n\n const { width, height } = image;\n const palette = getPaletteColors(colorScheme);\n const indices = new Uint8Array(width * height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const idx = y * width + x;\n const dataIdx = idx * 4;\n\n // Get threshold from Bayer matrix\n const threshold = bayerMatrix[(y % 4) * 4 + (x % 4)];\n\n // Add threshold noise (clamp to 0-255 like Python's np.clip)\n const rgb: RGB = {\n r: Math.max(0, Math.min(255, Math.trunc(image.data[dataIdx] + threshold))),\n g: Math.max(0, Math.min(255, Math.trunc(image.data[dataIdx + 1] + threshold))),\n b: Math.max(0, Math.min(255, Math.trunc(image.data[dataIdx + 2] + threshold))),\n };\n\n indices[idx] = findClosestPaletteColor(rgb, palette);\n }\n }\n\n return { width, height, indices, palette };\n}\n\n/**\n * Burkes dithering (divisor 200)\n * Kernel:\n * X 32 12\n * 5 12 26 12 5\n */\nexport function burkesDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const kernel: ErrorKernel[] = [\n { dx: 1, dy: 0, weight: 32 / 200 },\n { dx: 2, dy: 0, weight: 12 / 200 },\n { dx: -2, dy: 1, weight: 5 / 200 },\n { dx: -1, dy: 1, weight: 12 / 200 },\n { dx: 0, dy: 1, weight: 26 / 200 },\n { dx: 1, dy: 1, weight: 12 / 200 },\n { dx: 2, dy: 1, weight: 5 / 200 },\n ];\n\n return errorDiffusionDither(image, colorScheme, kernel);\n}\n\n/**\n * Floyd-Steinberg dithering (divisor 16)\n * Most popular error diffusion algorithm\n * Kernel:\n * X 7\n * 3 5 1\n */\nexport function floydSteinbergDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const kernel: ErrorKernel[] = [\n { dx: 1, dy: 0, weight: 7 / 16 },\n { dx: -1, dy: 1, weight: 3 / 16 },\n { dx: 0, dy: 1, weight: 5 / 16 },\n { dx: 1, dy: 1, weight: 1 / 16 },\n ];\n\n return errorDiffusionDither(image, colorScheme, kernel);\n}\n\n/**\n * Sierra dithering (divisor 32)\n * Kernel:\n * X 5 3\n * 2 4 5 4 2\n * 2 3 2\n */\nexport function sierraDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const kernel: ErrorKernel[] = [\n { dx: 1, dy: 0, weight: 5 / 32 },\n { dx: 2, dy: 0, weight: 3 / 32 },\n { dx: -2, dy: 1, weight: 2 / 32 },\n { dx: -1, dy: 1, weight: 4 / 32 },\n { dx: 0, dy: 1, weight: 5 / 32 },\n { dx: 1, dy: 1, weight: 4 / 32 },\n { dx: 2, dy: 1, weight: 2 / 32 },\n { dx: -1, dy: 2, weight: 2 / 32 },\n { dx: 0, dy: 2, weight: 3 / 32 },\n { dx: 1, dy: 2, weight: 2 / 32 },\n ];\n\n return errorDiffusionDither(image, colorScheme, kernel);\n}\n\n/**\n * Sierra Lite dithering (divisor 4)\n * Fastest error diffusion algorithm\n * Kernel:\n * X 2\n * 1 1\n */\nexport function sierraLiteDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const kernel: ErrorKernel[] = [\n { dx: 1, dy: 0, weight: 2 / 4 },\n { dx: -1, dy: 1, weight: 1 / 4 },\n { dx: 0, dy: 1, weight: 1 / 4 },\n ];\n\n return errorDiffusionDither(image, colorScheme, kernel);\n}\n\n/**\n * Atkinson dithering (divisor 8)\n * Created by Bill Atkinson for original Macintosh\n * Kernel:\n * X 1 1\n * 1 1 1\n * 1\n */\nexport function atkinsonDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const kernel: ErrorKernel[] = [\n { dx: 1, dy: 0, weight: 1 / 8 },\n { dx: 2, dy: 0, weight: 1 / 8 },\n { dx: -1, dy: 1, weight: 1 / 8 },\n { dx: 0, dy: 1, weight: 1 / 8 },\n { dx: 1, dy: 1, weight: 1 / 8 },\n { dx: 0, dy: 2, weight: 1 / 8 },\n ];\n\n return errorDiffusionDither(image, colorScheme, kernel);\n}\n\n/**\n * Stucki dithering (divisor 42)\n * High quality error diffusion\n * Kernel:\n * X 8 4\n * 2 4 8 4 2\n * 1 2 4 2 1\n */\nexport function stuckiDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const kernel: ErrorKernel[] = [\n { dx: 1, dy: 0, weight: 8 / 42 },\n { dx: 2, dy: 0, weight: 4 / 42 },\n { dx: -2, dy: 1, weight: 2 / 42 },\n { dx: -1, dy: 1, weight: 4 / 42 },\n { dx: 0, dy: 1, weight: 8 / 42 },\n { dx: 1, dy: 1, weight: 4 / 42 },\n { dx: 2, dy: 1, weight: 2 / 42 },\n { dx: -2, dy: 2, weight: 1 / 42 },\n { dx: -1, dy: 2, weight: 2 / 42 },\n { dx: 0, dy: 2, weight: 4 / 42 },\n { dx: 1, dy: 2, weight: 2 / 42 },\n { dx: 2, dy: 2, weight: 1 / 42 },\n ];\n\n return errorDiffusionDither(image, colorScheme, kernel);\n}\n\n/**\n * Jarvis-Judice-Ninke dithering (divisor 48)\n * Highest quality, slowest algorithm\n * Kernel:\n * X 7 5\n * 3 5 7 5 3\n * 1 3 5 3 1\n */\nexport function jarvisJudiceNinkeDither(\n image: ImageBuffer,\n colorScheme: ColorScheme\n): PaletteImageBuffer {\n const kernel: ErrorKernel[] = [\n { dx: 1, dy: 0, weight: 7 / 48 },\n { dx: 2, dy: 0, weight: 5 / 48 },\n { dx: -2, dy: 1, weight: 3 / 48 },\n { dx: -1, dy: 1, weight: 5 / 48 },\n { dx: 0, dy: 1, weight: 7 / 48 },\n { dx: 1, dy: 1, weight: 5 / 48 },\n { dx: 2, dy: 1, weight: 3 / 48 },\n { dx: -2, dy: 2, weight: 1 / 48 },\n { dx: -1, dy: 2, weight: 3 / 48 },\n { dx: 0, dy: 2, weight: 5 / 48 },\n { dx: 1, dy: 2, weight: 3 / 48 },\n { dx: 2, dy: 2, weight: 1 / 48 },\n ];\n\n return errorDiffusionDither(image, colorScheme, kernel);\n}","import type { ImageBuffer, PaletteImageBuffer } from './types';\nimport { DitherMode } from './enums';\nimport { ColorScheme } from './palettes';\nimport * as algorithms from './algorithms';\n\n/**\n * Apply dithering algorithm to image for e-paper display\n *\n * @param image - Input image buffer (RGBA format)\n * @param colorScheme - Target e-paper color scheme\n * @param mode - Dithering algorithm (default: BURKES)\n * @returns Palette-indexed image buffer\n *\n * @example\n * ```typescript\n * const dithered = ditherImage(imageBuffer, ColorScheme.BWR, DitherMode.FLOYD_STEINBERG);\n * ```\n */\nexport function ditherImage(\n image: ImageBuffer,\n colorScheme: ColorScheme,\n mode: DitherMode = DitherMode.BURKES\n): PaletteImageBuffer {\n switch (mode) {\n case DitherMode.NONE:\n return algorithms.directPaletteMap(image, colorScheme);\n case DitherMode.ORDERED:\n return algorithms.orderedDither(image, colorScheme);\n case DitherMode.FLOYD_STEINBERG:\n return algorithms.floydSteinbergDither(image, colorScheme);\n case DitherMode.ATKINSON:\n return algorithms.atkinsonDither(image, colorScheme);\n case DitherMode.STUCKI:\n return algorithms.stuckiDither(image, colorScheme);\n case DitherMode.SIERRA:\n return algorithms.sierraDither(image, colorScheme);\n case DitherMode.SIERRA_LITE:\n return algorithms.sierraLiteDither(image, colorScheme);\n case DitherMode.JARVIS_JUDICE_NINKE:\n return algorithms.jarvisJudiceNinkeDither(image, colorScheme);\n case DitherMode.BURKES:\n default:\n return algorithms.burkesDither(image, colorScheme);\n }\n}","export { ditherImage } from './core';\nexport { DitherMode } from './enums';\nexport {\n ColorScheme,\n getPalette,\n getColorCount,\n fromValue,\n} from './palettes';\nexport type { RGB, ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\n\nexport const VERSION = '0.1.0';"]}
|
|
1
|
+
{"version":3,"sources":["../src/enums.ts","../src/palettes.ts","../src/wasm-core/epaper_dithering_wasm_bg.js","../src/core.ts","../src/index.ts"],"names":["DitherMode","ColorScheme"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Dithering algorithm modes\n * Values match firmware conventions (0-8)\n */\nexport enum DitherMode {\n NONE = 0,\n BURKES = 1,\n ORDERED = 2,\n FLOYD_STEINBERG = 3,\n ATKINSON = 4,\n STUCKI = 5,\n SIERRA = 6,\n SIERRA_LITE = 7,\n JARVIS_JUDICE_NINKE = 8,\n}","import type { ColorPalette } from './types';\n\n/**\n * E-paper display color schemes\n * Values match firmware conventions (0-7)\n */\nexport enum ColorScheme {\n MONO = 0,\n BWR = 1,\n BWY = 2,\n BWRY = 3,\n BWGBRY = 4,\n GRAYSCALE_4 = 5,\n GRAYSCALE_8 = 6,\n GRAYSCALE_16 = 7,\n}\n\nconst PALETTES: Record<ColorScheme, ColorPalette> = {\n [ColorScheme.MONO]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.BWR]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n },\n accent: 'yellow',\n },\n [ColorScheme.BWRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.BWGBRY]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n white: { r: 255, g: 255, b: 255 },\n yellow: { r: 255, g: 255, b: 0 },\n red: { r: 255, g: 0, b: 0 },\n blue: { r: 0, g: 0, b: 255 },\n green: { r: 0, g: 255, b: 0 },\n },\n accent: 'red',\n },\n [ColorScheme.GRAYSCALE_4]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 85, g: 85, b: 85 },\n gray2: { r: 170, g: 170, b: 170 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.GRAYSCALE_8]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 36, g: 36, b: 36 },\n gray2: { r: 73, g: 73, b: 73 },\n gray3: { r: 109, g: 109, b: 109 },\n gray4: { r: 146, g: 146, b: 146 },\n gray5: { r: 182, g: 182, b: 182 },\n gray6: { r: 219, g: 219, b: 219 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n [ColorScheme.GRAYSCALE_16]: {\n colors: {\n black: { r: 0, g: 0, b: 0 },\n gray1: { r: 17, g: 17, b: 17 },\n gray2: { r: 34, g: 34, b: 34 },\n gray3: { r: 51, g: 51, b: 51 },\n gray4: { r: 68, g: 68, b: 68 },\n gray5: { r: 85, g: 85, b: 85 },\n gray6: { r: 102, g: 102, b: 102 },\n gray7: { r: 119, g: 119, b: 119 },\n gray8: { r: 136, g: 136, b: 136 },\n gray9: { r: 153, g: 153, b: 153 },\n gray10: { r: 170, g: 170, b: 170 },\n gray11: { r: 187, g: 187, b: 187 },\n gray12: { r: 204, g: 204, b: 204 },\n gray13: { r: 221, g: 221, b: 221 },\n gray14: { r: 238, g: 238, b: 238 },\n white: { r: 255, g: 255, b: 255 },\n },\n accent: 'black',\n },\n};\n\n/** Get color palette for a color scheme */\nexport function getPalette(scheme: ColorScheme): ColorPalette {\n return PALETTES[scheme];\n}\n\n/** Get number of colors in a color scheme */\nexport function getColorCount(scheme: ColorScheme): number {\n return Object.keys(PALETTES[scheme].colors).length;\n}\n\n/** Create ColorScheme from firmware integer value */\nexport function fromValue(value: number): ColorScheme {\n if (value < 0 || value > 7) {\n throw new Error(`Invalid color scheme value: ${value}`);\n }\n return value as ColorScheme;\n}\n\n// =============================================================================\n// Measured Palettes for Specific E-Paper Displays\n// =============================================================================\n//\n// These constants provide measured RGB values from real e-paper displays.\n// Pass them directly to ditherImage() instead of a ColorScheme enum.\n//\n// Usage:\n// import { ditherImage, SPECTRA_7_3_6COLOR } from '@opendisplay/epaper-dithering';\n// const result = ditherImage(imageBuffer, SPECTRA_7_3_6COLOR);\n//\n// NOTE: RGB values are defined in packages/rust/core/src/measured_palettes.rs\n// (single source of truth). The Python package derives its constants from Rust\n// via FFI at import time. TypeScript cannot do the same (WASM init order), so\n// values here must be kept in sync manually with the Rust source.\n// The WASM `measured_palettes()` function is exposed for future tooling.\n//\n// TO ADD A NEW DISPLAY: update measured_palettes.rs + add the constant below.\n// =============================================================================\n\n// 7.3\" Spectra™ 6-color (BWGBRY scheme)\n// Measured: 2026-02-03, iPhone 15 Pro Max RAW + Hue Play bars @ 6500K\n// Paper reference RGB(215,217,218); normalization: value × (255/paper_channel)\nexport const SPECTRA_7_3_6COLOR: ColorPalette = {\n colors: {\n black: { r: 26, g: 13, b: 35 },\n white: { r: 185, g: 202, b: 205 },\n yellow: { r: 202, g: 184, b: 0 },\n red: { r: 121, g: 9, b: 0 },\n blue: { r: 0, g: 69, b: 139 },\n green: { r: 40, g: 82, b: 57 },\n },\n accent: 'red',\n};\n\n// 4.26\" Monochrome (MONO scheme)\nexport const MONO_4_26: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 220, g: 220, b: 220 },\n },\n accent: 'black',\n};\n\n// 4.2\" BWRY (BWRY scheme)\nexport const BWRY_4_2: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n yellow: { r: 200, g: 180, b: 0 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Solum BWR (harvested display, BWR scheme)\nexport const SOLUM_BWR: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Hanshow BWR (harvested display, BWR scheme)\nexport const HANSHOW_BWR: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n red: { r: 120, g: 15, b: 5 },\n },\n accent: 'red',\n};\n\n// Hanshow BWY (harvested display, BWY scheme)\nexport const HANSHOW_BWY: ColorPalette = {\n colors: {\n black: { r: 5, g: 5, b: 5 },\n white: { r: 200, g: 200, b: 200 },\n yellow: { r: 200, g: 180, b: 0 },\n },\n accent: 'yellow',\n};\n\n// 3.97\" BWRY — EP397YR_800x480 (BWRY scheme)\n// 7.3\" Spectra™ 6-color (BWGBRY scheme) — v2 measurement\n// Measured: 2026-03-15, iPhone 15 Pro Max RAW + Affinity (v3), A4 paper white reference\n// Method: DNG with linear tone curve, WB from A4 paper, uniform ×2.4 scale\nexport const SPECTRA_7_3_6COLOR_V2: ColorPalette = {\n colors: {\n black: { r: 31, g: 24, b: 41 },\n white: { r: 168, g: 180, b: 182 },\n yellow: { r: 180, g: 173, b: 0 },\n red: { r: 113, g: 24, b: 19 },\n blue: { r: 36, g: 70, b: 139 },\n green: { r: 50, g: 84, b: 60 },\n },\n accent: 'red',\n};\n\n// Measured: 2026-03-06, iPhone RAW\n// Paper reference RGB(205,205,205); normalization: value × (255/205)\nexport const BWRY_3_97: ColorPalette = {\n colors: {\n black: { r: 10, g: 7, b: 14 },\n white: { r: 173, g: 178, b: 174 },\n yellow: { r: 172, g: 128, b: 0 },\n red: { r: 85, g: 24, b: 14 },\n },\n accent: 'red',\n};\n","/**\n * Composite an RGBA buffer onto white, returning flat RGB bytes (sRGB).\n * @param {Uint8Array} rgba\n * @returns {Uint8Array}\n */\nexport function composite_rgba(rgba) {\n const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.composite_rgba(ptr0, len0);\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n}\n\n/**\n * Dither a flat RGB image. Accepts either an idealized `scheme_id` or a measured\n * `palette_bytes`/`accent_idx` pair; `palette_bytes` empty ⇒ use `scheme_id`.\n *\n * Returns a `Uint8Array` of palette indices (one per pixel, length = width × height).\n * @param {Uint8Array} pixels\n * @param {number} width\n * @param {number} scheme_id\n * @param {Uint8Array} palette_bytes\n * @param {number} accent_idx\n * @param {number} mode_id\n * @param {boolean} serpentine\n * @param {number} exposure\n * @param {number} saturation\n * @param {number} shadows\n * @param {number} highlights\n * @param {number | null} [tone]\n * @param {number | null} [gamut]\n * @returns {Uint8Array}\n */\nexport function dither_image(pixels, width, scheme_id, palette_bytes, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, tone, gamut) {\n const ptr0 = passArray8ToWasm0(pixels, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray8ToWasm0(palette_bytes, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.dither_image(ptr0, len0, width, scheme_id, ptr1, len1, accent_idx, mode_id, serpentine, exposure, saturation, shadows, highlights, !isLikeNone(tone), isLikeNone(tone) ? 0 : tone, !isLikeNone(gamut), isLikeNone(gamut) ? 0 : gamut);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v3;\n}\n\n/**\n * Returns all measured palettes as a JSON string.\n *\n * Format: `[{\"id\": \"SPECTRA_7_3_6COLOR\", \"colors\": [[r,g,b], ...], \"color_names\": [...], \"accent_idx\": 3}, ...]`\n * @returns {string}\n */\nexport function measured_palettes() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.measured_palettes();\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n}\nexport function __wbindgen_cast_0000000000000001(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n}\nexport function __wbindgen_init_externref_table() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n}\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\n\nlet wasm;\nexport function __wbg_set_wasm(val) {\n wasm = val;\n}\n","import type { ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\nimport { DitherMode } from './enums';\nimport { ColorScheme, getPalette } from './palettes';\nimport {\n dither_image as wasmDitherImage,\n composite_rgba as wasmCompositeRgba,\n __wbg_set_wasm,\n __wbindgen_init_externref_table,\n __wbindgen_cast_0000000000000001,\n} from './wasm-core/epaper_dithering_wasm_bg.js';\nimport wasmBytes from './wasm-core/epaper_dithering_wasm_bg.wasm';\n\n// Synchronous WASM initialization — runs once at module load time.\nconst wasmModule = new WebAssembly.Module(wasmBytes as unknown as ArrayBuffer);\nconst wasmInstance = new WebAssembly.Instance(wasmModule, {\n './epaper_dithering_wasm_bg.js': {\n __wbindgen_init_externref_table,\n __wbindgen_cast_0000000000000001,\n },\n});\n__wbg_set_wasm(wasmInstance.exports);\n(wasmInstance.exports as Record<string, () => void>).__wbindgen_start?.();\n\n/**\n * Options for `ditherImage`. All fields are optional — defaults are sensible.\n *\n * Pre-processing pipeline (each step is a no-op at its identity value):\n * `exposure → saturation → shadows/highlights → tone → gamut → dither`.\n */\nexport interface DitherOptions {\n /** Dithering algorithm. Default: `DitherMode.BURKES`. */\n mode?: DitherMode;\n /** Alternate row scan direction for error diffusion. Default: `true`. */\n serpentine?: boolean;\n /** Linear-RGB exposure multiplier. 1.0 = no change, 2.0 = +1 stop. Default: `1.0`. */\n exposure?: number;\n /** OKLab saturation multiplier. 1.0 = no change, 0.0 = grayscale. Default: `1.0`. */\n saturation?: number;\n /** Shadow lift strength (S-curve lower half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n shadows?: number;\n /** Highlight compression strength (S-curve upper half). 0.0 = off, 1.0 = strong. Default: `0.0`. */\n highlights?: number;\n /** Dynamic-range compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */\n tone?: number | 'auto' | 'off';\n /** Gamut compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */\n gamut?: number | 'auto' | 'off';\n}\n\n/**\n * Apply dithering to an RGBA image for an e-paper display.\n *\n * @param image Input RGBA image. Alpha is composited on white.\n * @param palette Target palette: `ColorScheme` enum (idealized) or `ColorPalette` (measured).\n * @param options Per-call overrides — see {@link DitherOptions}.\n * @returns Palette-indexed image buffer.\n */\nexport function ditherImage(\n image: ImageBuffer,\n palette: ColorScheme | ColorPalette,\n options: DitherOptions = {},\n): PaletteImageBuffer {\n const {\n mode = DitherMode.BURKES,\n serpentine = true,\n exposure = 1.0,\n saturation = 1.0,\n shadows = 0.0,\n highlights = 0.0,\n tone = 'auto',\n gamut = 'auto',\n } = options;\n\n const rgba = new Uint8Array(image.data.buffer, image.data.byteOffset, image.data.byteLength);\n const pixels = wasmCompositeRgba(rgba);\n\n // Idealized schemes don't have a measured display range, so tone/gamut don't apply.\n const isScheme = typeof palette === 'number';\n const toneArg = isScheme ? 0.0 : parseCompression(tone);\n const gamutArg = isScheme ? 0.0 : parseCompression(gamut);\n\n let schemeId = 0;\n let paletteBytes: Uint8Array;\n let accentIdx = 0;\n let outputColors: { r: number; g: number; b: number }[];\n\n if (isScheme) {\n schemeId = palette as number;\n paletteBytes = new Uint8Array(0);\n outputColors = Object.values(getPalette(palette).colors);\n } else {\n const colors = Object.values(palette.colors);\n paletteBytes = new Uint8Array(colors.flatMap(c => [c.r, c.g, c.b]));\n accentIdx = Object.keys(palette.colors).indexOf(palette.accent);\n outputColors = colors;\n }\n\n const indices = wasmDitherImage(\n pixels, image.width,\n schemeId, paletteBytes, accentIdx,\n mode as number, serpentine,\n exposure, saturation, shadows, highlights,\n toneArg, gamutArg,\n );\n\n return { width: image.width, height: image.height, indices, palette: outputColors };\n}\n\n/** Map `'auto'` → `undefined` (Rust None = auto), `'off'` → 0.0, number → pass through. */\nfunction parseCompression(v: number | 'auto' | 'off'): number | undefined {\n if (v === 'auto') return undefined;\n if (v === 'off') return 0.0;\n return v;\n}\n","export { ditherImage } from './core';\nexport type { DitherOptions } from './core';\nexport { DitherMode } from './enums';\nexport {\n ColorScheme,\n getPalette,\n getColorCount,\n fromValue,\n // Measured palettes\n SPECTRA_7_3_6COLOR,\n SPECTRA_7_3_6COLOR_V2,\n MONO_4_26,\n BWRY_4_2,\n SOLUM_BWR,\n HANSHOW_BWR,\n HANSHOW_BWY,\n BWRY_3_97,\n} from './palettes';\nexport type { RGB, ImageBuffer, PaletteImageBuffer, ColorPalette } from './types';\n\nexport const VERSION = '0.1.0';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -50,7 +50,7 @@ declare enum DitherMode {
|
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* E-paper display color schemes
|
|
53
|
-
* Values match firmware conventions (0-
|
|
53
|
+
* Values match firmware conventions (0-7)
|
|
54
54
|
*/
|
|
55
55
|
declare enum ColorScheme {
|
|
56
56
|
MONO = 0,
|
|
@@ -58,36 +58,59 @@ declare enum ColorScheme {
|
|
|
58
58
|
BWY = 2,
|
|
59
59
|
BWRY = 3,
|
|
60
60
|
BWGBRY = 4,
|
|
61
|
-
GRAYSCALE_4 = 5
|
|
61
|
+
GRAYSCALE_4 = 5,
|
|
62
|
+
GRAYSCALE_8 = 6,
|
|
63
|
+
GRAYSCALE_16 = 7
|
|
62
64
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Get color palette for a color scheme
|
|
65
|
-
*/
|
|
65
|
+
/** Get color palette for a color scheme */
|
|
66
66
|
declare function getPalette(scheme: ColorScheme): ColorPalette;
|
|
67
|
-
/**
|
|
68
|
-
* Get number of colors in a color scheme
|
|
69
|
-
*/
|
|
67
|
+
/** Get number of colors in a color scheme */
|
|
70
68
|
declare function getColorCount(scheme: ColorScheme): number;
|
|
71
|
-
/**
|
|
72
|
-
* Create ColorScheme from firmware integer value
|
|
73
|
-
*/
|
|
69
|
+
/** Create ColorScheme from firmware integer value */
|
|
74
70
|
declare function fromValue(value: number): ColorScheme;
|
|
71
|
+
declare const SPECTRA_7_3_6COLOR: ColorPalette;
|
|
72
|
+
declare const MONO_4_26: ColorPalette;
|
|
73
|
+
declare const BWRY_4_2: ColorPalette;
|
|
74
|
+
declare const SOLUM_BWR: ColorPalette;
|
|
75
|
+
declare const HANSHOW_BWR: ColorPalette;
|
|
76
|
+
declare const HANSHOW_BWY: ColorPalette;
|
|
77
|
+
declare const SPECTRA_7_3_6COLOR_V2: ColorPalette;
|
|
78
|
+
declare const BWRY_3_97: ColorPalette;
|
|
75
79
|
|
|
76
80
|
/**
|
|
77
|
-
*
|
|
81
|
+
* Options for `ditherImage`. All fields are optional — defaults are sensible.
|
|
78
82
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
* Pre-processing pipeline (each step is a no-op at its identity value):
|
|
84
|
+
* `exposure → saturation → shadows/highlights → tone → gamut → dither`.
|
|
85
|
+
*/
|
|
86
|
+
interface DitherOptions {
|
|
87
|
+
/** Dithering algorithm. Default: `DitherMode.BURKES`. */
|
|
88
|
+
mode?: DitherMode;
|
|
89
|
+
/** Alternate row scan direction for error diffusion. Default: `true`. */
|
|
90
|
+
serpentine?: boolean;
|
|
91
|
+
/** Linear-RGB exposure multiplier. 1.0 = no change, 2.0 = +1 stop. Default: `1.0`. */
|
|
92
|
+
exposure?: number;
|
|
93
|
+
/** OKLab saturation multiplier. 1.0 = no change, 0.0 = grayscale. Default: `1.0`. */
|
|
94
|
+
saturation?: number;
|
|
95
|
+
/** Shadow lift strength (S-curve lower half). 0.0 = off, 1.0 = strong. Default: `0.0`. */
|
|
96
|
+
shadows?: number;
|
|
97
|
+
/** Highlight compression strength (S-curve upper half). 0.0 = off, 1.0 = strong. Default: `0.0`. */
|
|
98
|
+
highlights?: number;
|
|
99
|
+
/** Dynamic-range compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */
|
|
100
|
+
tone?: number | 'auto' | 'off';
|
|
101
|
+
/** Gamut compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */
|
|
102
|
+
gamut?: number | 'auto' | 'off';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Apply dithering to an RGBA image for an e-paper display.
|
|
83
106
|
*
|
|
84
|
-
* @
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
107
|
+
* @param image Input RGBA image. Alpha is composited on white.
|
|
108
|
+
* @param palette Target palette: `ColorScheme` enum (idealized) or `ColorPalette` (measured).
|
|
109
|
+
* @param options Per-call overrides — see {@link DitherOptions}.
|
|
110
|
+
* @returns Palette-indexed image buffer.
|
|
88
111
|
*/
|
|
89
|
-
declare function ditherImage(image: ImageBuffer,
|
|
112
|
+
declare function ditherImage(image: ImageBuffer, palette: ColorScheme | ColorPalette, options?: DitherOptions): PaletteImageBuffer;
|
|
90
113
|
|
|
91
114
|
declare const VERSION = "0.1.0";
|
|
92
115
|
|
|
93
|
-
export { type ColorPalette, ColorScheme, DitherMode, type ImageBuffer, type PaletteImageBuffer, type RGB, VERSION, ditherImage, fromValue, getColorCount, getPalette };
|
|
116
|
+
export { BWRY_3_97, BWRY_4_2, type ColorPalette, ColorScheme, DitherMode, type DitherOptions, HANSHOW_BWR, HANSHOW_BWY, type ImageBuffer, MONO_4_26, type PaletteImageBuffer, type RGB, SOLUM_BWR, SPECTRA_7_3_6COLOR, SPECTRA_7_3_6COLOR_V2, VERSION, ditherImage, fromValue, getColorCount, getPalette };
|
package/dist/index.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ declare enum DitherMode {
|
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* E-paper display color schemes
|
|
53
|
-
* Values match firmware conventions (0-
|
|
53
|
+
* Values match firmware conventions (0-7)
|
|
54
54
|
*/
|
|
55
55
|
declare enum ColorScheme {
|
|
56
56
|
MONO = 0,
|
|
@@ -58,36 +58,59 @@ declare enum ColorScheme {
|
|
|
58
58
|
BWY = 2,
|
|
59
59
|
BWRY = 3,
|
|
60
60
|
BWGBRY = 4,
|
|
61
|
-
GRAYSCALE_4 = 5
|
|
61
|
+
GRAYSCALE_4 = 5,
|
|
62
|
+
GRAYSCALE_8 = 6,
|
|
63
|
+
GRAYSCALE_16 = 7
|
|
62
64
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Get color palette for a color scheme
|
|
65
|
-
*/
|
|
65
|
+
/** Get color palette for a color scheme */
|
|
66
66
|
declare function getPalette(scheme: ColorScheme): ColorPalette;
|
|
67
|
-
/**
|
|
68
|
-
* Get number of colors in a color scheme
|
|
69
|
-
*/
|
|
67
|
+
/** Get number of colors in a color scheme */
|
|
70
68
|
declare function getColorCount(scheme: ColorScheme): number;
|
|
71
|
-
/**
|
|
72
|
-
* Create ColorScheme from firmware integer value
|
|
73
|
-
*/
|
|
69
|
+
/** Create ColorScheme from firmware integer value */
|
|
74
70
|
declare function fromValue(value: number): ColorScheme;
|
|
71
|
+
declare const SPECTRA_7_3_6COLOR: ColorPalette;
|
|
72
|
+
declare const MONO_4_26: ColorPalette;
|
|
73
|
+
declare const BWRY_4_2: ColorPalette;
|
|
74
|
+
declare const SOLUM_BWR: ColorPalette;
|
|
75
|
+
declare const HANSHOW_BWR: ColorPalette;
|
|
76
|
+
declare const HANSHOW_BWY: ColorPalette;
|
|
77
|
+
declare const SPECTRA_7_3_6COLOR_V2: ColorPalette;
|
|
78
|
+
declare const BWRY_3_97: ColorPalette;
|
|
75
79
|
|
|
76
80
|
/**
|
|
77
|
-
*
|
|
81
|
+
* Options for `ditherImage`. All fields are optional — defaults are sensible.
|
|
78
82
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
* Pre-processing pipeline (each step is a no-op at its identity value):
|
|
84
|
+
* `exposure → saturation → shadows/highlights → tone → gamut → dither`.
|
|
85
|
+
*/
|
|
86
|
+
interface DitherOptions {
|
|
87
|
+
/** Dithering algorithm. Default: `DitherMode.BURKES`. */
|
|
88
|
+
mode?: DitherMode;
|
|
89
|
+
/** Alternate row scan direction for error diffusion. Default: `true`. */
|
|
90
|
+
serpentine?: boolean;
|
|
91
|
+
/** Linear-RGB exposure multiplier. 1.0 = no change, 2.0 = +1 stop. Default: `1.0`. */
|
|
92
|
+
exposure?: number;
|
|
93
|
+
/** OKLab saturation multiplier. 1.0 = no change, 0.0 = grayscale. Default: `1.0`. */
|
|
94
|
+
saturation?: number;
|
|
95
|
+
/** Shadow lift strength (S-curve lower half). 0.0 = off, 1.0 = strong. Default: `0.0`. */
|
|
96
|
+
shadows?: number;
|
|
97
|
+
/** Highlight compression strength (S-curve upper half). 0.0 = off, 1.0 = strong. Default: `0.0`. */
|
|
98
|
+
highlights?: number;
|
|
99
|
+
/** Dynamic-range compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */
|
|
100
|
+
tone?: number | 'auto' | 'off';
|
|
101
|
+
/** Gamut compression: `'auto'` | `'off'` | 0.0–1.0. Default: `'auto'`. */
|
|
102
|
+
gamut?: number | 'auto' | 'off';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Apply dithering to an RGBA image for an e-paper display.
|
|
83
106
|
*
|
|
84
|
-
* @
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
107
|
+
* @param image Input RGBA image. Alpha is composited on white.
|
|
108
|
+
* @param palette Target palette: `ColorScheme` enum (idealized) or `ColorPalette` (measured).
|
|
109
|
+
* @param options Per-call overrides — see {@link DitherOptions}.
|
|
110
|
+
* @returns Palette-indexed image buffer.
|
|
88
111
|
*/
|
|
89
|
-
declare function ditherImage(image: ImageBuffer,
|
|
112
|
+
declare function ditherImage(image: ImageBuffer, palette: ColorScheme | ColorPalette, options?: DitherOptions): PaletteImageBuffer;
|
|
90
113
|
|
|
91
114
|
declare const VERSION = "0.1.0";
|
|
92
115
|
|
|
93
|
-
export { type ColorPalette, ColorScheme, DitherMode, type ImageBuffer, type PaletteImageBuffer, type RGB, VERSION, ditherImage, fromValue, getColorCount, getPalette };
|
|
116
|
+
export { BWRY_3_97, BWRY_4_2, type ColorPalette, ColorScheme, DitherMode, type DitherOptions, HANSHOW_BWR, HANSHOW_BWY, type ImageBuffer, MONO_4_26, type PaletteImageBuffer, type RGB, SOLUM_BWR, SPECTRA_7_3_6COLOR, SPECTRA_7_3_6COLOR_V2, VERSION, ditherImage, fromValue, getColorCount, getPalette };
|