home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2002 April / pcpro0402.iso / essentials / graphics / Gimp / gimp-src-20001226.exe / src / gimp / app / fsdither.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-01  |  32.5 KB  |  560 lines

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