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|