home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 43 / PCGAMER43.bin / utils / wing / httables.c_ / httables.c
C/C++ Source or Header  |  1995-06-20  |  8KB  |  381 lines

  1. /**************************************************************************
  2.  
  3.     HTTABLES.C - halftone tables
  4.  
  5.  **************************************************************************/
  6. /**************************************************************************
  7.  
  8.     (C) Copyright 1994 Microsoft Corp.  All rights reserved.
  9.  
  10.     You have a royalty-free right to use, modify, reproduce and 
  11.     distribute the Sample Files (and/or any modified version) in 
  12.     any way you find useful, provided that you agree that 
  13.     Microsoft has no warranty obligations or liability for any 
  14.     Sample Application Files which are modified. 
  15.  
  16.  **************************************************************************/
  17.  
  18. #include<windows.h>
  19. #include<memory.h>
  20.  
  21. #include<wing.h>
  22.  
  23.  
  24. long const PALETTERGBFlag = 0x02000000;
  25. long const PALETTEINDEXFlag = 0x01000000;
  26.  
  27. /*----------------------------------------------------------------------------
  28.  
  29. Division lookup tables.  These tables compute 0-255 divided by 51 and
  30. modulo 51.  These tables could approximate gamma correction.
  31.  
  32. */
  33.  
  34. char unsigned const aDividedBy51Rounded[256] =
  35. {
  36.   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  37.   0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  38.   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  39.   1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  40.   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  41.   2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  42.   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  43.   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  44.   4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  45.   4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  46.   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  47. };
  48.  
  49. char unsigned const aDividedBy51[256] =
  50. {
  51.   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  52.   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  53.   0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  54.   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  55.   1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  56.   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  57.   2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  58.   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  59.   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  60.   4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  61.   4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 
  62. };
  63.  
  64. char unsigned const aModulo51[256] =
  65. {
  66.   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
  67.   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
  68.   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 0, 1, 2, 3, 4, 5, 6,
  69.   7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
  70.   26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
  71.   44, 45, 46, 47, 48, 49, 50, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
  72.   13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
  73.   31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
  74.   49, 50, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
  75.   18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
  76.   36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 0, 1, 2, 3,
  77.   4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
  78.   23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
  79.   41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 0, 
  80. };
  81.  
  82.  
  83. /*----------------------------------------------------------------------------
  84.  
  85. Multiplication LUTs.  These compute 0-5 times 6 and 36.
  86.  
  87. */
  88.  
  89. char unsigned const aTimes6[6] =
  90. {
  91.   0, 6, 12, 18, 24, 30
  92. };
  93.  
  94. char unsigned const aTimes36[6] =
  95. {
  96.   0, 36, 72, 108, 144, 180
  97. };
  98.  
  99.  
  100. /*----------------------------------------------------------------------------
  101.  
  102. Dither matrices for 8 bit to 2.6 bit halftones.
  103.  
  104. */
  105.  
  106. char unsigned const aHalftone16x16[256] =
  107. {
  108.   0, 44, 9, 41, 3, 46, 12, 43, 1, 44, 10, 41, 3, 46, 12, 43,
  109.   34, 16, 25, 19, 37, 18, 28, 21, 35, 16, 26, 19, 37, 18, 28, 21,
  110.   38, 6, 47, 3, 40, 9, 50, 6, 38, 7, 47, 4, 40, 9, 49, 6,
  111.   22, 28, 13, 31, 25, 31, 15, 34, 22, 29, 13, 32, 24, 31, 15, 34,
  112.   2, 46, 12, 43, 1, 45, 10, 42, 2, 45, 11, 42, 1, 45, 11, 42,
  113.   37, 18, 27, 21, 35, 17, 26, 20, 36, 17, 27, 20, 36, 17, 26, 20,
  114.   40, 8, 49, 5, 38, 7, 48, 4, 39, 8, 48, 5, 39, 7, 48, 4,
  115.   24, 30, 15, 33, 23, 29, 13, 32, 23, 30, 14, 33, 23, 29, 14, 32,
  116.   2, 46, 12, 43, 0, 44, 10, 41, 3, 47, 12, 44, 0, 44, 10, 41,
  117.   37, 18, 27, 21, 35, 16, 25, 19, 37, 19, 28, 22, 35, 16, 25, 19,
  118.   40, 9, 49, 5, 38, 7, 47, 4, 40, 9, 50, 6, 38, 6, 47, 3,
  119.   24, 30, 15, 34, 22, 29, 13, 32, 25, 31, 15, 34, 22, 28, 13, 31,
  120.   1, 45, 11, 42, 2, 46, 11, 42, 1, 45, 10, 41, 2, 46, 11, 43,
  121.   36, 17, 26, 20, 36, 17, 27, 21, 35, 16, 26, 20, 36, 18, 27, 21,
  122.   39, 8, 48, 4, 39, 8, 49, 5, 38, 7, 48, 4, 39, 8, 49, 5,
  123.   23, 29, 14, 33, 24, 30, 14, 33, 23, 29, 13, 32, 24, 30, 14, 33,
  124. };
  125.  
  126. char unsigned const aHalftone8x8[64] =
  127. {
  128.    0, 38,  9, 47,  2, 40, 11, 50,
  129.   25, 12, 35, 22, 27, 15, 37, 24,
  130.    6, 44,  3, 41,  8, 47,  5, 43,
  131.   31, 19, 28, 15, 34, 21, 31, 18,
  132.    1, 39, 11, 49,  0, 39, 10, 48,
  133.   27, 14, 36, 23, 26, 13, 35, 23,
  134.    7, 46,  4, 43,  7, 45,  3, 42,
  135.   33, 20, 30, 17, 32, 19, 29, 16,
  136. };
  137.  
  138. char unsigned const aHalftone4x4_1[16] =
  139. {
  140.   0, 25, 6, 31,
  141.   38, 12, 44, 19,
  142.   9, 35, 3, 28,
  143.   47, 22, 41, 15
  144. };
  145.  
  146. char unsigned const aHalftone4x4_2[16] =
  147. {
  148.   41, 3, 9, 28,
  149.   35, 15, 22, 47,
  150.   6, 25, 38, 0,
  151.   19, 44, 31, 12
  152. };
  153.  
  154. /***************************************************************************
  155.   aWinGHalftoneTranslation
  156.  
  157.   Translates a 2.6 bit-per-pixel halftoned representation into the
  158.   slightly rearranged WinG Halftone Palette.
  159. */
  160.  
  161. char unsigned const aWinGHalftoneTranslation[216] =
  162. {
  163.   0,
  164.   29,
  165.   30,
  166.   31,
  167.   32,
  168.   249,
  169.   33,
  170.   34,
  171.   35,
  172.   36,
  173.   37,
  174.   38,
  175.   39,
  176.   40,
  177.   41,
  178.   42,
  179.   43,
  180.   44,
  181.   45,
  182.   46,
  183.   47,
  184.   48,
  185.   49,
  186.   50,
  187.   51,
  188.   52,
  189.   53,
  190.   54,
  191.   55,
  192.   56,
  193.   250,
  194.   250,
  195.   57,
  196.   58,
  197.   59,
  198.   251,
  199.   60,
  200.   61,
  201.   62,
  202.   63,
  203.   64,
  204.   65,
  205.   66,
  206.   67,
  207.   68,
  208.   69,
  209.   70,
  210.   71,
  211.   72,
  212.   73,
  213.   74,
  214.   75,
  215.   76,
  216.   77,
  217.   78,
  218.   79,
  219.   80,
  220.   81,
  221.   82,
  222.   83,
  223.   84,
  224.   85,
  225.   86,
  226.   87,
  227.   88,
  228.   89,
  229.   250,
  230.   90,
  231.   91,
  232.   92,
  233.   93,
  234.   94,
  235.   95,
  236.   96,
  237.   97,
  238.   98,
  239.   99,
  240.   100,
  241.   101,
  242.   102,
  243.   103,
  244.   104,
  245.   105,
  246.   106,
  247.   107,
  248.   108,
  249.   109,
  250.   110,
  251.   111,
  252.   227,
  253.   112,
  254.   113,
  255.   114,
  256.   115,
  257.   116,
  258.   117,
  259.   118,
  260.   119,
  261.   151,
  262.   120,
  263.   121,
  264.   122,
  265.   123,
  266.   124,
  267.   228,
  268.   125,
  269.   126,
  270.   229,
  271.   133,
  272.   162,
  273.   135,
  274.   131,
  275.   132,
  276.   137,
  277.   166,
  278.   134,
  279.   140,
  280.   130,
  281.   136,
  282.   143,
  283.   138,
  284.   139,
  285.   174,
  286.   141,
  287.   142,
  288.   177,
  289.   129,
  290.   144,
  291.   145,
  292.   146,
  293.   147,
  294.   148,
  295.   149,
  296.   150,
  297.   157,
  298.   152,
  299.   153,
  300.   154,
  301.   155,
  302.   156,
  303.   192,
  304.   158,
  305.   159,
  306.   160,
  307.   161,
  308.   196,
  309.   163,
  310.   164,
  311.   165,
  312.   127,
  313.   199,
  314.   167,
  315.   168,
  316.   169,
  317.   170,
  318.   171,
  319.   172,
  320.   173,
  321.   207,
  322.   175,
  323.   176,
  324.   210,
  325.   178,
  326.   179,
  327.   180,
  328.   181,
  329.   182,
  330.   183,
  331.   184,
  332.   185,
  333.   186,
  334.   187,
  335.   188,
  336.   189,
  337.   190,
  338.   191,
  339.   224,
  340.   193,
  341.   194,
  342.   195,
  343.   252,
  344.   252,
  345.   197,
  346.   198,
  347.   128,
  348.   253,
  349.   252,
  350.   200,
  351.   201,
  352.   202,
  353.   203,
  354.   204,
  355.   205,
  356.   206,
  357.   230,
  358.   208,
  359.   209,
  360.   231,
  361.   211,
  362.   212,
  363.   213,
  364.   214,
  365.   215,
  366.   216,
  367.   217,
  368.   218,
  369.   219,
  370.   220,
  371.   221,
  372.   222,
  373.   254,
  374.   223,
  375.   232,
  376.   225,
  377.   226,
  378.   255,
  379. };
  380.  
  381.