MASK.C

[目次 | 関数]

目次

関数一覧


   1|/***************************************************************************
   2|*  1. <<< 描画用マスク (Mask) >>> 
   3|*
   4|*・模様付きの塗りつぶしなどに使います。
   5|***************************************************************************/
   6|
   7|#include  <mask.ah>
   8|
   9| 
  10|/***************************************************************************
  11|*  2. <<< [Mask_A_initBy1bpp_x2] Mask_A 型のマスクの初期化 >>> 
  12|****************************************************************************/
  13|void  Mask_A_initBy1bpp_x2( Mask_A* x, unsigned char p1_1bpp[],
  14|  Mask_Color p1_color, unsigned char p2_1bpp[], Mask_Color p2_color )
  15|{
  16|  int  i;
  17|  u_long  p1_4bpp, p1_4bppMask;
  18|  u_long  p2_4bpp, p2_4bppMask;
  19|
  20|  for ( i = 0; i < 8; i++ ) {
  21|    p1_4bpp = ( Mask_colors16[p1_color] & Mask_bpp1to4[p1_1bpp[i]] );
  22|    p1_4bppMask = ~Mask_bpp1to4[p1_1bpp[i]];
  23|    p2_4bpp = ( Mask_colors16[p2_color] & Mask_bpp1to4[p2_1bpp[i]] );
  24|    p2_4bppMask = ~Mask_bpp1to4[p2_1bpp[i]];
  25|    x->bpp4[i] = ( p2_4bpp | (p2_4bppMask & p1_4bpp) );
  26|    x->bpp4Mask[i] = ( p1_4bppMask & p2_4bppMask );
  27|  }
  28|}
  29|
  30|
  31| 
  32|/***************************************************************************
  33|*  3. <<< [Mask_A_initByPlain] 単色のマスクの作成 >>> 
  34|****************************************************************************/
  35|void  Mask_A_initByPlain( Mask_A* x, int color )
  36|{
  37|  int  i;
  38|
  39|  for ( i = 0; i < 8; i++ ) {
  40|    x->bpp4[i] = Mask_colors16[color];
  41|    x->bpp4Mask[i] = 0x00000000;
  42|  }
  43|}
  44|
  45|
  46| 
  47|/***************************************************************************
  48|*  4. <<< [Mask_colors16[16]] 16 色マスク >>> 
  49|****************************************************************************/
  50|u_long  Mask_colors16[16] = {
  51|  0x00000000, 0x11111111, 0x22222222, 0x33333333,
  52|  0x44444444, 0x55555555, 0x66666666, 0x77777777,
  53|  0x88888888, 0x99999999, 0xAAAAAAAA, 0xBBBBBBBB,
  54|  0xCCCCCCCC, 0xDDDDDDDD, 0xEEEEEEEE, 0xFFFFFFFF,
  55|};
  56|
  57|
  58| 
  59|/***************************************************************************
  60|*  5. <<< [Mask_leftEnd_for4bpp[8]] ライン左端のピクセルマスク >>> 
  61|*  6. <<< [Mask_leftEnd_for8bpp[4]] ライン左端のピクセルマスク >>>
  62|****************************************************************************/
  63|#ifdef MASK_EDIAN_NORMAL
  64|  u_long  Mask_leftEnd_for4bpp[8] = {
  65|    0xFFFFFFFF, 0x0FFFFFFF, 0x00FFFFFF, 0x000FFFFF,
  66|    0x0000FFFF, 0x00000FFF, 0x000000FF, 0x0000000F,
  67|  };
  68|  u_long  Mask_leftEnd_for8bpp[4] =
  69|    { 0xFFFFFFFF, 0x00FFFFFF, 0x0000FFFF, 0x000000FF };
  70|#endif
  71|#ifdef MASK_EDIAN_REVERSE
  72|  u_long  Mask_leftEnd_for4bpp[8] = {
  73|    0xFFFFFFFF, 0xFFFFFFF0, 0xFFFFFF00, 0xFFFFF000,
  74|    0xFFFF0000, 0xFFF00000, 0xFF000000, 0xF0000000,
  75|  };
  76|  u_long  Mask_leftEnd_for8bpp[4] =
  77|    { 0xFFFFFFFF, 0xFFFFFF00, 0xFFFF0000, 0xFF000000 };
  78|#endif
  79|
  80|
  81| 
  82|/***************************************************************************
  83|*  7. <<< [Mask_rightEnd_for4bpp[8]] ライン右端のピクセルマスク >>> 
  84|*  8. <<< [Mask_rightEnd_for8bpp[4]] ライン右端のピクセルマスク >>>
  85|****************************************************************************/
  86|#ifdef MASK_EDIAN_NORMAL
  87|  u_long  Mask_rightEnd_for4bpp[8] = {
  88|    0xF0000000, 0xFF000000, 0xFFF00000, 0xFFFF0000,
  89|    0xFFFFF000, 0xFFFFFF00, 0xFFFFFFF0, 0xFFFFFFFF,
  90|  };
  91|  u_long  Mask_rightEnd_for8bpp[4] =
  92|    { 0xFFFFFFFF, 0xFFFFFF00, 0xFFFF0000, 0xFF000000 };
  93|#endif
  94|#ifdef MASK_EDIAN_REVERSE
  95|  u_long  Mask_rightEnd_for4bpp[8] = {
  96|    0x0000000F, 0x000000FF, 0x00000FFF, 0x0000FFFF,
  97|    0x000FFFFF, 0x00FFFFFF, 0x0FFFFFFF, 0xFFFFFFFF,
  98|  };
  99|  u_long  Mask_rightEnd_for8bpp[4] =
 100|    { 0xFFFFFFFF, 0x00FFFFFF, 0x0000FFFF, 0x000000FF };
 101|#endif
 102|
 103|
 104| 
 105|/***************************************************************************
 106|*  9. <<< [Mask_bpp1to4[0x100]] bpp 変換テーブル >>> 
 107|****************************************************************************/
 108|u_long  Mask_bpp1to4[0x100] = {  /* Big Edian */
 109|  0x00000000, 0xF0000000, 0x0F000000, 0xFF000000,
 110|  0x00F00000, 0xF0F00000, 0x0FF00000, 0xFFF00000,
 111|  0x000F0000, 0xF00F0000, 0x0F0F0000, 0xFF0F0000,
 112|  0x00FF0000, 0xF0FF0000, 0x0FFF0000, 0xFFFF0000,
 113|  0x0000F000, 0xF000F000, 0x0F00F000, 0xFF00F000,
 114|  0x00F0F000, 0xF0F0F000, 0x0FF0F000, 0xFFF0F000,
 115|  0x000FF000, 0xF00FF000, 0x0F0FF000, 0xFF0FF000,
 116|  0x00FFF000, 0xF0FFF000, 0x0FFFF000, 0xFFFFF000,
 117|  0x00000F00, 0xF0000F00, 0x0F000F00, 0xFF000F00,
 118|  0x00F00F00, 0xF0F00F00, 0x0FF00F00, 0xFFF00F00,
 119|  0x000F0F00, 0xF00F0F00, 0x0F0F0F00, 0xFF0F0F00,
 120|  0x00FF0F00, 0xF0FF0F00, 0x0FFF0F00, 0xFFFF0F00,
 121|  0x0000FF00, 0xF000FF00, 0x0F00FF00, 0xFF00FF00,
 122|  0x00F0FF00, 0xF0F0FF00, 0x0FF0FF00, 0xFFF0FF00,
 123|  0x000FFF00, 0xF00FFF00, 0x0F0FFF00, 0xFF0FFF00,
 124|  0x00FFFF00, 0xF0FFFF00, 0x0FFFFF00, 0xFFFFFF00,
 125|  0x000000F0, 0xF00000F0, 0x0F0000F0, 0xFF0000F0,
 126|  0x00F000F0, 0xF0F000F0, 0x0FF000F0, 0xFFF000F0,
 127|  0x000F00F0, 0xF00F00F0, 0x0F0F00F0, 0xFF0F00F0,
 128|  0x00FF00F0, 0xF0FF00F0, 0x0FFF00F0, 0xFFFF00F0,
 129|  0x0000F0F0, 0xF000F0F0, 0x0F00F0F0, 0xFF00F0F0,
 130|  0x00F0F0F0, 0xF0F0F0F0, 0x0FF0F0F0, 0xFFF0F0F0,
 131|  0x000FF0F0, 0xF00FF0F0, 0x0F0FF0F0, 0xFF0FF0F0,
 132|  0x00FFF0F0, 0xF0FFF0F0, 0x0FFFF0F0, 0xFFFFF0F0,
 133|  0x00000FF0, 0xF0000FF0, 0x0F000FF0, 0xFF000FF0,
 134|  0x00F00FF0, 0xF0F00FF0, 0x0FF00FF0, 0xFFF00FF0,
 135|  0x000F0FF0, 0xF00F0FF0, 0x0F0F0FF0, 0xFF0F0FF0,
 136|  0x00FF0FF0, 0xF0FF0FF0, 0x0FFF0FF0, 0xFFFF0FF0,
 137|  0x0000FFF0, 0xF000FFF0, 0x0F00FFF0, 0xFF00FFF0,
 138|  0x00F0FFF0, 0xF0F0FFF0, 0x0FF0FFF0, 0xFFF0FFF0,
 139|  0x000FFFF0, 0xF00FFFF0, 0x0F0FFFF0, 0xFF0FFFF0,
 140|  0x00FFFFF0, 0xF0FFFFF0, 0x0FFFFFF0, 0xFFFFFFF0,
 141|  0x0000000F, 0xF000000F, 0x0F00000F, 0xFF00000F,
 142|  0x00F0000F, 0xF0F0000F, 0x0FF0000F, 0xFFF0000F,
 143|  0x000F000F, 0xF00F000F, 0x0F0F000F, 0xFF0F000F,
 144|  0x00FF000F, 0xF0FF000F, 0x0FFF000F, 0xFFFF000F,
 145|  0x0000F00F, 0xF000F00F, 0x0F00F00F, 0xFF00F00F,
 146|  0x00F0F00F, 0xF0F0F00F, 0x0FF0F00F, 0xFFF0F00F,
 147|  0x000FF00F, 0xF00FF00F, 0x0F0FF00F, 0xFF0FF00F,
 148|  0x00FFF00F, 0xF0FFF00F, 0x0FFFF00F, 0xFFFFF00F,
 149|  0x00000F0F, 0xF0000F0F, 0x0F000F0F, 0xFF000F0F,
 150|  0x00F00F0F, 0xF0F00F0F, 0x0FF00F0F, 0xFFF00F0F,
 151|  0x000F0F0F, 0xF00F0F0F, 0x0F0F0F0F, 0xFF0F0F0F,
 152|  0x00FF0F0F, 0xF0FF0F0F, 0x0FFF0F0F, 0xFFFF0F0F,
 153|  0x0000FF0F, 0xF000FF0F, 0x0F00FF0F, 0xFF00FF0F,
 154|  0x00F0FF0F, 0xF0F0FF0F, 0x0FF0FF0F, 0xFFF0FF0F,
 155|  0x000FFF0F, 0xF00FFF0F, 0x0F0FFF0F, 0xFF0FFF0F,
 156|  0x00FFFF0F, 0xF0FFFF0F, 0x0FFFFF0F, 0xFFFFFF0F,
 157|  0x000000FF, 0xF00000FF, 0x0F0000FF, 0xFF0000FF,
 158|  0x00F000FF, 0xF0F000FF, 0x0FF000FF, 0xFFF000FF,
 159|  0x000F00FF, 0xF00F00FF, 0x0F0F00FF, 0xFF0F00FF,
 160|  0x00FF00FF, 0xF0FF00FF, 0x0FFF00FF, 0xFFFF00FF,
 161|  0x0000F0FF, 0xF000F0FF, 0x0F00F0FF, 0xFF00F0FF,
 162|  0x00F0F0FF, 0xF0F0F0FF, 0x0FF0F0FF, 0xFFF0F0FF,
 163|  0x000FF0FF, 0xF00FF0FF, 0x0F0FF0FF, 0xFF0FF0FF,
 164|  0x00FFF0FF, 0xF0FFF0FF, 0x0FFFF0FF, 0xFFFFF0FF,
 165|  0x00000FFF, 0xF0000FFF, 0x0F000FFF, 0xFF000FFF,
 166|  0x00F00FFF, 0xF0F00FFF, 0x0FF00FFF, 0xFFF00FFF,
 167|  0x000F0FFF, 0xF00F0FFF, 0x0F0F0FFF, 0xFF0F0FFF,
 168|  0x00FF0FFF, 0xF0FF0FFF, 0x0FFF0FFF, 0xFFFF0FFF,
 169|  0x0000FFFF, 0xF000FFFF, 0x0F00FFFF, 0xFF00FFFF,
 170|  0x00F0FFFF, 0xF0F0FFFF, 0x0FF0FFFF, 0xFFF0FFFF,
 171|  0x000FFFFF, 0xF00FFFFF, 0x0F0FFFFF, 0xFF0FFFFF,
 172|  0x00FFFFFF, 0xF0FFFFFF, 0x0FFFFFFF, 0xFFFFFFFF,
 173|};
 174| 
 175|