fsdither.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. /* The GIMP -- an image manipulation program
  2. * Copyright (C) 1995 Spencer Kimball and Peter Mattis
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. */
  18. #ifndef __FSDITHER_H__
  19. #define __FSDITHER_H__
  20. /* The following 5 arrays are used in performing floyd-steinberg
  21. * error diffusion dithering. The range array allows the quick
  22. * bounds checking of pixel values. The 4 error arrays contain
  23. * the error computations for the east, south-east, south and
  24. * south-west pixels surrounding the current pixel respectively.
  25. */
  26. const short range_array[] = {
  27. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  28. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  29. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  30. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  31. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  32. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  33. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  34. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  35. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  36. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  37. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  38. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  39. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  40. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  41. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  42. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  43. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  44. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  45. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  46. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  47. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  48. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  49. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  50. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  51. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  52. 0, 0, 0, 0, 0, 0, 0, 1, 2, 3,
  53. 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
  54. 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
  55. 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
  56. 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
  57. 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
  58. 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  59. 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
  60. 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
  61. 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
  62. 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
  63. 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
  64. 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
  65. 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
  66. 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  67. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
  68. 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
  69. 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
  70. 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
  71. 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
  72. 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
  73. 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
  74. 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
  75. 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
  76. 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
  77. 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
  78. 254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  79. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  80. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  81. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  82. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  83. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  84. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  85. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  86. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  87. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  88. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  89. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  90. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  91. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  92. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  93. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  94. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  95. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  96. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  97. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  98. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  99. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  100. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  101. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  102. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  103. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  104. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  105. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  106. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  107. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  108. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  109. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  110. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  111. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  112. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  113. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  114. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  115. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  116. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  117. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  118. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  119. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  120. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  121. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  122. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  123. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  124. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  125. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  126. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  127. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  128. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  129. 255, 255, 255, 255, 255,
  130. };
  131. const short floyd_steinberg_error1[] = {
  132. -223, -223, -222, -222, -221, -221, -220, -220, -220, -219,
  133. -219, -218, -218, -217, -217, -217, -216, -216, -215, -215,
  134. -214, -214, -213, -213, -213, -212, -212, -211, -211, -210,
  135. -210, -210, -209, -209, -208, -208, -207, -207, -206, -206,
  136. -206, -205, -205, -204, -204, -203, -203, -203, -202, -202,
  137. -201, -201, -200, -200, -199, -199, -199, -198, -198, -197,
  138. -197, -196, -196, -196, -195, -195, -194, -194, -193, -193,
  139. -192, -192, -192, -191, -191, -190, -190, -189, -189, -189,
  140. -188, -188, -187, -187, -186, -186, -185, -185, -185, -184,
  141. -184, -183, -183, -182, -182, -182, -181, -181, -180, -180,
  142. -179, -179, -178, -178, -178, -177, -177, -176, -176, -175,
  143. -175, -175, -174, -174, -173, -173, -172, -172, -171, -171,
  144. -171, -170, -170, -169, -169, -168, -168, -168, -167, -167,
  145. -166, -166, -165, -165, -164, -164, -164, -163, -163, -162,
  146. -162, -161, -161, -161, -160, -160, -159, -159, -158, -158,
  147. -157, -157, -157, -156, -156, -155, -155, -154, -154, -154,
  148. -153, -153, -152, -152, -151, -151, -150, -150, -150, -149,
  149. -149, -148, -148, -147, -147, -147, -146, -146, -145, -145,
  150. -144, -144, -143, -143, -143, -142, -142, -141, -141, -140,
  151. -140, -140, -139, -139, -138, -138, -137, -137, -136, -136,
  152. -136, -135, -135, -134, -134, -133, -133, -133, -132, -132,
  153. -131, -131, -130, -130, -129, -129, -129, -128, -128, -127,
  154. -127, -126, -126, -126, -125, -125, -124, -124, -123, -123,
  155. -122, -122, -122, -121, -121, -120, -120, -119, -119, -119,
  156. -118, -118, -117, -117, -116, -116, -115, -115, -115, -114,
  157. -114, -113, -113, -112, -112, -112, -111, -111, -110, -110,
  158. -109, -109, -108, -108, -108, -107, -107, -106, -106, -105,
  159. -105, -105, -104, -104, -103, -103, -102, -102, -101, -101,
  160. -101, -100, -100, -99, -99, -98, -98, -98, -97, -97,
  161. -96, -96, -95, -95, -94, -94, -94, -93, -93, -92,
  162. -92, -91, -91, -91, -90, -90, -89, -89, -88, -88,
  163. -87, -87, -87, -86, -86, -85, -85, -84, -84, -84,
  164. -83, -83, -82, -82, -81, -81, -80, -80, -80, -79,
  165. -79, -78, -78, -77, -77, -77, -76, -76, -75, -75,
  166. -74, -74, -73, -73, -73, -72, -72, -71, -71, -70,
  167. -70, -70, -69, -69, -68, -68, -67, -67, -66, -66,
  168. -66, -65, -65, -64, -64, -63, -63, -63, -62, -62,
  169. -61, -61, -60, -60, -59, -59, -59, -58, -58, -57,
  170. -57, -56, -56, -56, -55, -55, -54, -54, -53, -53,
  171. -52, -52, -52, -51, -51, -50, -50, -49, -49, -49,
  172. -48, -48, -47, -47, -46, -46, -45, -45, -45, -44,
  173. -44, -43, -43, -42, -42, -42, -41, -41, -40, -40,
  174. -39, -39, -38, -38, -38, -37, -37, -36, -36, -35,
  175. -35, -35, -34, -34, -33, -33, -32, -32, -31, -31,
  176. -31, -30, -30, -29, -29, -28, -28, -28, -27, -27,
  177. -26, -26, -25, -25, -24, -24, -24, -23, -23, -22,
  178. -22, -21, -21, -21, -20, -20, -19, -19, -18, -18,
  179. -17, -17, -17, -16, -16, -15, -15, -14, -14, -14,
  180. -13, -13, -12, -12, -11, -11, -10, -10, -10, -9,
  181. -9, -8, -8, -7, -7, -7, -6, -6, -5, -5,
  182. -4, -4, -3, -3, -3, -2, -2, -1, -1, 0,
  183. 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
  184. 3, 4, 4, 5, 5, 6, 6, 7, 7, 7,
  185. 8, 8, 9, 9, 10, 10, 10, 11, 11, 12,
  186. 12, 13, 13, 14, 14, 14, 15, 15, 16, 16,
  187. 17, 17, 17, 18, 18, 19, 19, 20, 20, 21,
  188. 21, 21, 22, 22, 23, 23, 24, 24, 24, 25,
  189. 25, 26, 26, 27, 27, 28, 28, 28, 29, 29,
  190. 30, 30, 31, 31, 31, 32, 32, 33, 33, 34,
  191. 34, 35, 35, 35, 36, 36, 37, 37, 38, 38,
  192. 38, 39, 39, 40, 40, 41, 41, 42, 42, 42,
  193. 43, 43, 44, 44, 45, 45, 45, 46, 46, 47,
  194. 47, 48, 48, 49, 49, 49, 50, 50, 51, 51,
  195. 52, 52, 52, 53, 53, 54, 54, 55, 55, 56,
  196. 56, 56, 57, 57, 58, 58, 59, 59, 59, 60,
  197. 60, 61, 61, 62, 62, 63, 63, 63, 64, 64,
  198. 65, 65, 66, 66, 66, 67, 67, 68, 68, 69,
  199. 69, 70, 70, 70, 71, 71, 72, 72, 73, 73,
  200. 73, 74, 74, 75, 75, 76, 76, 77, 77, 77,
  201. 78, 78, 79, 79, 80, 80, 80, 81, 81, 82,
  202. 82, 83, 83, 84, 84, 84, 85, 85, 86, 86,
  203. 87, 87, 87, 88, 88, 89, 89, 90, 90, 91,
  204. 91, 91, 92, 92, 93, 93, 94, 94, 94, 95,
  205. 95, 96, 96, 97, 97, 98, 98, 98, 99, 99,
  206. 100, 100, 101, 101, 101, 102, 102, 103, 103, 104,
  207. 104, 105, 105, 105, 106, 106, 107, 107, 108, 108,
  208. 108, 109, 109, 110, 110, 111, 111, 112, 112, 112,
  209. 113, 113, 114, 114, 115, 115, 115, 116, 116, 117,
  210. 117, 118, 118, 119, 119, 119, 120, 120, 121, 121,
  211. 122, 122, 122, 123, 123, 124, 124, 125, 125, 126,
  212. 126, 126, 127, 127, 128, 128, 129, 129, 129, 130,
  213. 130, 131, 131, 132, 132, 133, 133, 133, 134, 134,
  214. 135, 135, 136, 136, 136, 137, 137, 138, 138, 139,
  215. 139, 140, 140, 140, 141, 141, 142, 142, 143, 143,
  216. 143, 144, 144, 145, 145, 146, 146, 147, 147, 147,
  217. 148, 148, 149, 149, 150, 150, 150, 151, 151, 152,
  218. 152, 153, 153, 154, 154, 154, 155, 155, 156, 156,
  219. 157, 157, 157, 158, 158, 159, 159, 160, 160, 161,
  220. 161, 161, 162, 162, 163, 163, 164, 164, 164, 165,
  221. 165, 166, 166, 167, 167, 168, 168, 168, 169, 169,
  222. 170, 170, 171, 171, 171, 172, 172, 173, 173, 174,
  223. 174, 175, 175, 175, 176, 176, 177, 177, 178, 178,
  224. 178, 179, 179, 180, 180, 181, 181, 182, 182, 182,
  225. 183, 183, 184, 184, 185, 185, 185, 186, 186, 187,
  226. 187, 188, 188, 189, 189, 189, 190, 190, 191, 191,
  227. 192, 192, 192, 193, 193, 194, 194, 195, 195, 196,
  228. 196, 196, 197, 197, 198, 198, 199, 199, 199, 200,
  229. 200, 201, 201, 202, 202, 203, 203, 203, 204, 204,
  230. 205, 205, 206, 206, 206, 207, 207, 208, 208, 209,
  231. 209, 210, 210, 210, 211, 211, 212, 212, 213, 213,
  232. 213, 214, 214, 215, 215, 216, 216, 217, 217, 217,
  233. 218, 218, 219, 219, 220, 220, 220, 221, 221, 222,
  234. 222, 223, 223, 224, 224,
  235. };
  236. const short floyd_steinberg_error2[] = {
  237. -95, -95, -95, -95, -95, -94, -94, -94, -94, -94,
  238. -93, -93, -93, -93, -93, -93, -92, -92, -92, -92,
  239. -92, -91, -91, -91, -91, -91, -90, -90, -90, -90,
  240. -90, -90, -89, -89, -89, -89, -89, -88, -88, -88,
  241. -88, -88, -87, -87, -87, -87, -87, -87, -86, -86,
  242. -86, -86, -86, -85, -85, -85, -85, -85, -84, -84,
  243. -84, -84, -84, -84, -83, -83, -83, -83, -83, -82,
  244. -82, -82, -82, -82, -81, -81, -81, -81, -81, -81,
  245. -80, -80, -80, -80, -80, -79, -79, -79, -79, -79,
  246. -78, -78, -78, -78, -78, -78, -77, -77, -77, -77,
  247. -77, -76, -76, -76, -76, -76, -75, -75, -75, -75,
  248. -75, -75, -74, -74, -74, -74, -74, -73, -73, -73,
  249. -73, -73, -72, -72, -72, -72, -72, -72, -71, -71,
  250. -71, -71, -71, -70, -70, -70, -70, -70, -69, -69,
  251. -69, -69, -69, -69, -68, -68, -68, -68, -68, -67,
  252. -67, -67, -67, -67, -66, -66, -66, -66, -66, -66,
  253. -65, -65, -65, -65, -65, -64, -64, -64, -64, -64,
  254. -63, -63, -63, -63, -63, -63, -62, -62, -62, -62,
  255. -62, -61, -61, -61, -61, -61, -60, -60, -60, -60,
  256. -60, -60, -59, -59, -59, -59, -59, -58, -58, -58,
  257. -58, -58, -57, -57, -57, -57, -57, -57, -56, -56,
  258. -56, -56, -56, -55, -55, -55, -55, -55, -54, -54,
  259. -54, -54, -54, -54, -53, -53, -53, -53, -53, -52,
  260. -52, -52, -52, -52, -51, -51, -51, -51, -51, -51,
  261. -50, -50, -50, -50, -50, -49, -49, -49, -49, -49,
  262. -48, -48, -48, -48, -48, -48, -47, -47, -47, -47,
  263. -47, -46, -46, -46, -46, -46, -45, -45, -45, -45,
  264. -45, -45, -44, -44, -44, -44, -44, -43, -43, -43,
  265. -43, -43, -42, -42, -42, -42, -42, -42, -41, -41,
  266. -41, -41, -41, -40, -40, -40, -40, -40, -39, -39,
  267. -39, -39, -39, -39, -38, -38, -38, -38, -38, -37,
  268. -37, -37, -37, -37, -36, -36, -36, -36, -36, -36,
  269. -35, -35, -35, -35, -35, -34, -34, -34, -34, -34,
  270. -33, -33, -33, -33, -33, -33, -32, -32, -32, -32,
  271. -32, -31, -31, -31, -31, -31, -30, -30, -30, -30,
  272. -30, -30, -29, -29, -29, -29, -29, -28, -28, -28,
  273. -28, -28, -27, -27, -27, -27, -27, -27, -26, -26,
  274. -26, -26, -26, -25, -25, -25, -25, -25, -24, -24,
  275. -24, -24, -24, -24, -23, -23, -23, -23, -23, -22,
  276. -22, -22, -22, -22, -21, -21, -21, -21, -21, -21,
  277. -20, -20, -20, -20, -20, -19, -19, -19, -19, -19,
  278. -18, -18, -18, -18, -18, -18, -17, -17, -17, -17,
  279. -17, -16, -16, -16, -16, -16, -15, -15, -15, -15,
  280. -15, -15, -14, -14, -14, -14, -14, -13, -13, -13,
  281. -13, -13, -12, -12, -12, -12, -12, -12, -11, -11,
  282. -11, -11, -11, -10, -10, -10, -10, -10, -9, -9,
  283. -9, -9, -9, -9, -8, -8, -8, -8, -8, -7,
  284. -7, -7, -7, -7, -6, -6, -6, -6, -6, -6,
  285. -5, -5, -5, -5, -5, -4, -4, -4, -4, -4,
  286. -3, -3, -3, -3, -3, -3, -2, -2, -2, -2,
  287. -2, -1, -1, -1, -1, -1, 0, 0, 0, 0,
  288. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  289. 1, 1, 2, 2, 2, 2, 2, 3, 3, 3,
  290. 3, 3, 3, 4, 4, 4, 4, 4, 5, 5,
  291. 5, 5, 5, 6, 6, 6, 6, 6, 6, 7,
  292. 7, 7, 7, 7, 8, 8, 8, 8, 8, 9,
  293. 9, 9, 9, 9, 9, 10, 10, 10, 10, 10,
  294. 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
  295. 12, 13, 13, 13, 13, 13, 14, 14, 14, 14,
  296. 14, 15, 15, 15, 15, 15, 15, 16, 16, 16,
  297. 16, 16, 17, 17, 17, 17, 17, 18, 18, 18,
  298. 18, 18, 18, 19, 19, 19, 19, 19, 20, 20,
  299. 20, 20, 20, 21, 21, 21, 21, 21, 21, 22,
  300. 22, 22, 22, 22, 23, 23, 23, 23, 23, 24,
  301. 24, 24, 24, 24, 24, 25, 25, 25, 25, 25,
  302. 26, 26, 26, 26, 26, 27, 27, 27, 27, 27,
  303. 27, 28, 28, 28, 28, 28, 29, 29, 29, 29,
  304. 29, 30, 30, 30, 30, 30, 30, 31, 31, 31,
  305. 31, 31, 32, 32, 32, 32, 32, 33, 33, 33,
  306. 33, 33, 33, 34, 34, 34, 34, 34, 35, 35,
  307. 35, 35, 35, 36, 36, 36, 36, 36, 36, 37,
  308. 37, 37, 37, 37, 38, 38, 38, 38, 38, 39,
  309. 39, 39, 39, 39, 39, 40, 40, 40, 40, 40,
  310. 41, 41, 41, 41, 41, 42, 42, 42, 42, 42,
  311. 42, 43, 43, 43, 43, 43, 44, 44, 44, 44,
  312. 44, 45, 45, 45, 45, 45, 45, 46, 46, 46,
  313. 46, 46, 47, 47, 47, 47, 47, 48, 48, 48,
  314. 48, 48, 48, 49, 49, 49, 49, 49, 50, 50,
  315. 50, 50, 50, 51, 51, 51, 51, 51, 51, 52,
  316. 52, 52, 52, 52, 53, 53, 53, 53, 53, 54,
  317. 54, 54, 54, 54, 54, 55, 55, 55, 55, 55,
  318. 56, 56, 56, 56, 56, 57, 57, 57, 57, 57,
  319. 57, 58, 58, 58, 58, 58, 59, 59, 59, 59,
  320. 59, 60, 60, 60, 60, 60, 60, 61, 61, 61,
  321. 61, 61, 62, 62, 62, 62, 62, 63, 63, 63,
  322. 63, 63, 63, 64, 64, 64, 64, 64, 65, 65,
  323. 65, 65, 65, 66, 66, 66, 66, 66, 66, 67,
  324. 67, 67, 67, 67, 68, 68, 68, 68, 68, 69,
  325. 69, 69, 69, 69, 69, 70, 70, 70, 70, 70,
  326. 71, 71, 71, 71, 71, 72, 72, 72, 72, 72,
  327. 72, 73, 73, 73, 73, 73, 74, 74, 74, 74,
  328. 74, 75, 75, 75, 75, 75, 75, 76, 76, 76,
  329. 76, 76, 77, 77, 77, 77, 77, 78, 78, 78,
  330. 78, 78, 78, 79, 79, 79, 79, 79, 80, 80,
  331. 80, 80, 80, 81, 81, 81, 81, 81, 81, 82,
  332. 82, 82, 82, 82, 83, 83, 83, 83, 83, 84,
  333. 84, 84, 84, 84, 84, 85, 85, 85, 85, 85,
  334. 86, 86, 86, 86, 86, 87, 87, 87, 87, 87,
  335. 87, 88, 88, 88, 88, 88, 89, 89, 89, 89,
  336. 89, 90, 90, 90, 90, 90, 90, 91, 91, 91,
  337. 91, 91, 92, 92, 92, 92, 92, 93, 93, 93,
  338. 93, 93, 93, 94, 94, 94, 94, 94, 95, 95,
  339. 95, 95, 95, 96, 96,
  340. };
  341. const short floyd_steinberg_error3[] = {
  342. -159, -159, -159, -158, -158, -158, -157, -157, -157, -156,
  343. -156, -156, -155, -155, -155, -155, -154, -154, -154, -153,
  344. -153, -153, -152, -152, -152, -151, -151, -151, -150, -150,
  345. -150, -150, -149, -149, -149, -148, -148, -148, -147, -147,
  346. -147, -146, -146, -146, -145, -145, -145, -145, -144, -144,
  347. -144, -143, -143, -143, -142, -142, -142, -141, -141, -141,
  348. -140, -140, -140, -140, -139, -139, -139, -138, -138, -138,
  349. -137, -137, -137, -136, -136, -136, -135, -135, -135, -135,
  350. -134, -134, -134, -133, -133, -133, -132, -132, -132, -131,
  351. -131, -131, -130, -130, -130, -130, -129, -129, -129, -128,
  352. -128, -128, -127, -127, -127, -126, -126, -126, -125, -125,
  353. -125, -125, -124, -124, -124, -123, -123, -123, -122, -122,
  354. -122, -121, -121, -121, -120, -120, -120, -120, -119, -119,
  355. -119, -118, -118, -118, -117, -117, -117, -116, -116, -116,
  356. -115, -115, -115, -115, -114, -114, -114, -113, -113, -113,
  357. -112, -112, -112, -111, -111, -111, -110, -110, -110, -110,
  358. -109, -109, -109, -108, -108, -108, -107, -107, -107, -106,
  359. -106, -106, -105, -105, -105, -105, -104, -104, -104, -103,
  360. -103, -103, -102, -102, -102, -101, -101, -101, -100, -100,
  361. -100, -100, -99, -99, -99, -98, -98, -98, -97, -97,
  362. -97, -96, -96, -96, -95, -95, -95, -95, -94, -94,
  363. -94, -93, -93, -93, -92, -92, -92, -91, -91, -91,
  364. -90, -90, -90, -90, -89, -89, -89, -88, -88, -88,
  365. -87, -87, -87, -86, -86, -86, -85, -85, -85, -85,
  366. -84, -84, -84, -83, -83, -83, -82, -82, -82, -81,
  367. -81, -81, -80, -80, -80, -80, -79, -79, -79, -78,
  368. -78, -78, -77, -77, -77, -76, -76, -76, -75, -75,
  369. -75, -75, -74, -74, -74, -73, -73, -73, -72, -72,
  370. -72, -71, -71, -71, -70, -70, -70, -70, -69, -69,
  371. -69, -68, -68, -68, -67, -67, -67, -66, -66, -66,
  372. -65, -65, -65, -65, -64, -64, -64, -63, -63, -63,
  373. -62, -62, -62, -61, -61, -61, -60, -60, -60, -60,
  374. -59, -59, -59, -58, -58, -58, -57, -57, -57, -56,
  375. -56, -56, -55, -55, -55, -55, -54, -54, -54, -53,
  376. -53, -53, -52, -52, -52, -51, -51, -51, -50, -50,
  377. -50, -50, -49, -49, -49, -48, -48, -48, -47, -47,
  378. -47, -46, -46, -46, -45, -45, -45, -45, -44, -44,
  379. -44, -43, -43, -43, -42, -42, -42, -41, -41, -41,
  380. -40, -40, -40, -40, -39, -39, -39, -38, -38, -38,
  381. -37, -37, -37, -36, -36, -36, -35, -35, -35, -35,
  382. -34, -34, -34, -33, -33, -33, -32, -32, -32, -31,
  383. -31, -31, -30, -30, -30, -30, -29, -29, -29, -28,
  384. -28, -28, -27, -27, -27, -26, -26, -26, -25, -25,
  385. -25, -25, -24, -24, -24, -23, -23, -23, -22, -22,
  386. -22, -21, -21, -21, -20, -20, -20, -20, -19, -19,
  387. -19, -18, -18, -18, -17, -17, -17, -16, -16, -16,
  388. -15, -15, -15, -15, -14, -14, -14, -13, -13, -13,
  389. -12, -12, -12, -11, -11, -11, -10, -10, -10, -10,
  390. -9, -9, -9, -8, -8, -8, -7, -7, -7, -6,
  391. -6, -6, -5, -5, -5, -5, -4, -4, -4, -3,
  392. -3, -3, -2, -2, -2, -1, -1, -1, 0, 0,
  393. 0, 0, 0, 0, 0, 1, 1, 1, 2, 2,
  394. 2, 3, 3, 3, 4, 4, 4, 5, 5, 5,
  395. 5, 6, 6, 6, 7, 7, 7, 8, 8, 8,
  396. 9, 9, 9, 10, 10, 10, 10, 11, 11, 11,
  397. 12, 12, 12, 13, 13, 13, 14, 14, 14, 15,
  398. 15, 15, 15, 16, 16, 16, 17, 17, 17, 18,
  399. 18, 18, 19, 19, 19, 20, 20, 20, 20, 21,
  400. 21, 21, 22, 22, 22, 23, 23, 23, 24, 24,
  401. 24, 25, 25, 25, 25, 26, 26, 26, 27, 27,
  402. 27, 28, 28, 28, 29, 29, 29, 30, 30, 30,
  403. 30, 31, 31, 31, 32, 32, 32, 33, 33, 33,
  404. 34, 34, 34, 35, 35, 35, 35, 36, 36, 36,
  405. 37, 37, 37, 38, 38, 38, 39, 39, 39, 40,
  406. 40, 40, 40, 41, 41, 41, 42, 42, 42, 43,
  407. 43, 43, 44, 44, 44, 45, 45, 45, 45, 46,
  408. 46, 46, 47, 47, 47, 48, 48, 48, 49, 49,
  409. 49, 50, 50, 50, 50, 51, 51, 51, 52, 52,
  410. 52, 53, 53, 53, 54, 54, 54, 55, 55, 55,
  411. 55, 56, 56, 56, 57, 57, 57, 58, 58, 58,
  412. 59, 59, 59, 60, 60, 60, 60, 61, 61, 61,
  413. 62, 62, 62, 63, 63, 63, 64, 64, 64, 65,
  414. 65, 65, 65, 66, 66, 66, 67, 67, 67, 68,
  415. 68, 68, 69, 69, 69, 70, 70, 70, 70, 71,
  416. 71, 71, 72, 72, 72, 73, 73, 73, 74, 74,
  417. 74, 75, 75, 75, 75, 76, 76, 76, 77, 77,
  418. 77, 78, 78, 78, 79, 79, 79, 80, 80, 80,
  419. 80, 81, 81, 81, 82, 82, 82, 83, 83, 83,
  420. 84, 84, 84, 85, 85, 85, 85, 86, 86, 86,
  421. 87, 87, 87, 88, 88, 88, 89, 89, 89, 90,
  422. 90, 90, 90, 91, 91, 91, 92, 92, 92, 93,
  423. 93, 93, 94, 94, 94, 95, 95, 95, 95, 96,
  424. 96, 96, 97, 97, 97, 98, 98, 98, 99, 99,
  425. 99, 100, 100, 100, 100, 101, 101, 101, 102, 102,
  426. 102, 103, 103, 103, 104, 104, 104, 105, 105, 105,
  427. 105, 106, 106, 106, 107, 107, 107, 108, 108, 108,
  428. 109, 109, 109, 110, 110, 110, 110, 111, 111, 111,
  429. 112, 112, 112, 113, 113, 113, 114, 114, 114, 115,
  430. 115, 115, 115, 116, 116, 116, 117, 117, 117, 118,
  431. 118, 118, 119, 119, 119, 120, 120, 120, 120, 121,
  432. 121, 121, 122, 122, 122, 123, 123, 123, 124, 124,
  433. 124, 125, 125, 125, 125, 126, 126, 126, 127, 127,
  434. 127, 128, 128, 128, 129, 129, 129, 130, 130, 130,
  435. 130, 131, 131, 131, 132, 132, 132, 133, 133, 133,
  436. 134, 134, 134, 135, 135, 135, 135, 136, 136, 136,
  437. 137, 137, 137, 138, 138, 138, 139, 139, 139, 140,
  438. 140, 140, 140, 141, 141, 141, 142, 142, 142, 143,
  439. 143, 143, 144, 144, 144, 145, 145, 145, 145, 146,
  440. 146, 146, 147, 147, 147, 148, 148, 148, 149, 149,
  441. 149, 150, 150, 150, 150, 151, 151, 151, 152, 152,
  442. 152, 153, 153, 153, 154, 154, 154, 155, 155, 155,
  443. 155, 156, 156, 156, 157, 157, 157, 158, 158, 158,
  444. 159, 159, 159, 160, 160,
  445. };
  446. const short floyd_steinberg_error4[] = {
  447. -34, -33, -33, -33, -33, -33, -34, -33, -32, -33,
  448. -33, -33, -33, -33, -32, -31, -33, -32, -32, -32,
  449. -32, -32, -33, -32, -31, -32, -32, -32, -32, -32,
  450. -31, -30, -32, -31, -31, -31, -31, -31, -32, -31,
  451. -30, -31, -31, -31, -31, -31, -30, -29, -31, -30,
  452. -30, -30, -30, -30, -31, -30, -29, -30, -30, -30,
  453. -30, -30, -29, -28, -30, -29, -29, -29, -29, -29,
  454. -30, -29, -28, -29, -29, -29, -29, -29, -28, -27,
  455. -29, -28, -28, -28, -28, -28, -29, -28, -27, -28,
  456. -28, -28, -28, -28, -27, -26, -28, -27, -27, -27,
  457. -27, -27, -28, -27, -26, -27, -27, -27, -27, -27,
  458. -26, -25, -27, -26, -26, -26, -26, -26, -27, -26,
  459. -25, -26, -26, -26, -26, -26, -25, -24, -26, -25,
  460. -25, -25, -25, -25, -26, -25, -24, -25, -25, -25,
  461. -25, -25, -24, -23, -25, -24, -24, -24, -24, -24,
  462. -25, -24, -23, -24, -24, -24, -24, -24, -23, -22,
  463. -24, -23, -23, -23, -23, -23, -24, -23, -22, -23,
  464. -23, -23, -23, -23, -22, -21, -23, -22, -22, -22,
  465. -22, -22, -23, -22, -21, -22, -22, -22, -22, -22,
  466. -21, -20, -22, -21, -21, -21, -21, -21, -22, -21,
  467. -20, -21, -21, -21, -21, -21, -20, -19, -21, -20,
  468. -20, -20, -20, -20, -21, -20, -19, -20, -20, -20,
  469. -20, -20, -19, -18, -20, -19, -19, -19, -19, -19,
  470. -20, -19, -18, -19, -19, -19, -19, -19, -18, -17,
  471. -19, -18, -18, -18, -18, -18, -19, -18, -17, -18,
  472. -18, -18, -18, -18, -17, -16, -18, -17, -17, -17,
  473. -17, -17, -18, -17, -16, -17, -17, -17, -17, -17,
  474. -16, -15, -17, -16, -16, -16, -16, -16, -17, -16,
  475. -15, -16, -16, -16, -16, -16, -15, -14, -16, -15,
  476. -15, -15, -15, -15, -16, -15, -14, -15, -15, -15,
  477. -15, -15, -14, -13, -15, -14, -14, -14, -14, -14,
  478. -15, -14, -13, -14, -14, -14, -14, -14, -13, -12,
  479. -14, -13, -13, -13, -13, -13, -14, -13, -12, -13,
  480. -13, -13, -13, -13, -12, -11, -13, -12, -12, -12,
  481. -12, -12, -13, -12, -11, -12, -12, -12, -12, -12,
  482. -11, -10, -12, -11, -11, -11, -11, -11, -12, -11,
  483. -10, -11, -11, -11, -11, -11, -10, -9, -11, -10,
  484. -10, -10, -10, -10, -11, -10, -9, -10, -10, -10,
  485. -10, -10, -9, -8, -10, -9, -9, -9, -9, -9,
  486. -10, -9, -8, -9, -9, -9, -9, -9, -8, -7,
  487. -9, -8, -8, -8, -8, -8, -9, -8, -7, -8,
  488. -8, -8, -8, -8, -7, -6, -8, -7, -7, -7,
  489. -7, -7, -8, -7, -6, -7, -7, -7, -7, -7,
  490. -6, -5, -7, -6, -6, -6, -6, -6, -7, -6,
  491. -5, -6, -6, -6, -6, -6, -5, -4, -6, -5,
  492. -5, -5, -5, -5, -6, -5, -4, -5, -5, -5,
  493. -5, -5, -4, -3, -5, -4, -4, -4, -4, -4,
  494. -5, -4, -3, -4, -4, -4, -4, -4, -3, -2,
  495. -4, -3, -3, -3, -3, -3, -4, -3, -2, -3,
  496. -3, -3, -3, -3, -2, -1, -3, -2, -2, -2,
  497. -2, -2, -3, -2, -1, -2, -2, -2, -2, -2,
  498. -1, 0, 1, 2, 2, 2, 2, 2, 1, 2,
  499. 3, 2, 2, 2, 2, 2, 3, 1, 2, 3,
  500. 3, 3, 3, 3, 2, 3, 4, 3, 3, 3,
  501. 3, 3, 4, 2, 3, 4, 4, 4, 4, 4,
  502. 3, 4, 5, 4, 4, 4, 4, 4, 5, 3,
  503. 4, 5, 5, 5, 5, 5, 4, 5, 6, 5,
  504. 5, 5, 5, 5, 6, 4, 5, 6, 6, 6,
  505. 6, 6, 5, 6, 7, 6, 6, 6, 6, 6,
  506. 7, 5, 6, 7, 7, 7, 7, 7, 6, 7,
  507. 8, 7, 7, 7, 7, 7, 8, 6, 7, 8,
  508. 8, 8, 8, 8, 7, 8, 9, 8, 8, 8,
  509. 8, 8, 9, 7, 8, 9, 9, 9, 9, 9,
  510. 8, 9, 10, 9, 9, 9, 9, 9, 10, 8,
  511. 9, 10, 10, 10, 10, 10, 9, 10, 11, 10,
  512. 10, 10, 10, 10, 11, 9, 10, 11, 11, 11,
  513. 11, 11, 10, 11, 12, 11, 11, 11, 11, 11,
  514. 12, 10, 11, 12, 12, 12, 12, 12, 11, 12,
  515. 13, 12, 12, 12, 12, 12, 13, 11, 12, 13,
  516. 13, 13, 13, 13, 12, 13, 14, 13, 13, 13,
  517. 13, 13, 14, 12, 13, 14, 14, 14, 14, 14,
  518. 13, 14, 15, 14, 14, 14, 14, 14, 15, 13,
  519. 14, 15, 15, 15, 15, 15, 14, 15, 16, 15,
  520. 15, 15, 15, 15, 16, 14, 15, 16, 16, 16,
  521. 16, 16, 15, 16, 17, 16, 16, 16, 16, 16,
  522. 17, 15, 16, 17, 17, 17, 17, 17, 16, 17,
  523. 18, 17, 17, 17, 17, 17, 18, 16, 17, 18,
  524. 18, 18, 18, 18, 17, 18, 19, 18, 18, 18,
  525. 18, 18, 19, 17, 18, 19, 19, 19, 19, 19,
  526. 18, 19, 20, 19, 19, 19, 19, 19, 20, 18,
  527. 19, 20, 20, 20, 20, 20, 19, 20, 21, 20,
  528. 20, 20, 20, 20, 21, 19, 20, 21, 21, 21,
  529. 21, 21, 20, 21, 22, 21, 21, 21, 21, 21,
  530. 22, 20, 21, 22, 22, 22, 22, 22, 21, 22,
  531. 23, 22, 22, 22, 22, 22, 23, 21, 22, 23,
  532. 23, 23, 23, 23, 22, 23, 24, 23, 23, 23,
  533. 23, 23, 24, 22, 23, 24, 24, 24, 24, 24,
  534. 23, 24, 25, 24, 24, 24, 24, 24, 25, 23,
  535. 24, 25, 25, 25, 25, 25, 24, 25, 26, 25,
  536. 25, 25, 25, 25, 26, 24, 25, 26, 26, 26,
  537. 26, 26, 25, 26, 27, 26, 26, 26, 26, 26,
  538. 27, 25, 26, 27, 27, 27, 27, 27, 26, 27,
  539. 28, 27, 27, 27, 27, 27, 28, 26, 27, 28,
  540. 28, 28, 28, 28, 27, 28, 29, 28, 28, 28,
  541. 28, 28, 29, 27, 28, 29, 29, 29, 29, 29,
  542. 28, 29, 30, 29, 29, 29, 29, 29, 30, 28,
  543. 29, 30, 30, 30, 30, 30, 29, 30, 31, 30,
  544. 30, 30, 30, 30, 31, 29, 30, 31, 31, 31,
  545. 31, 31, 30, 31, 32, 31, 31, 31, 31, 31,
  546. 32, 30, 31, 32, 32, 32, 32, 32, 31, 32,
  547. 33, 32, 32, 32, 32, 32, 33, 31, 32, 33,
  548. 33, 33, 33, 33, 32, 33, 34, 33, 33, 33,
  549. 33, 33, 34, 32, 33,
  550. };
  551. #endif /* __FSDITHER_H__ */