Rev 7190 | Rev 7257 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7254 | leency | 1 | #define MAX_CELL_SIZE 256 |
2 | |||
7155 | leency | 3 | struct _image |
7089 | leency | 4 | { |
5 | unsigned rows, columns; |
||
7254 | leency | 6 | dword mas[MAX_CELL_SIZE*MAX_CELL_SIZE]; |
7151 | leency | 7 | dword img; |
7155 | leency | 8 | void create(); |
7151 | leency | 9 | void set_pixel(); |
7254 | leency | 10 | void draw_line(); |
11 | void fill(); |
||
7156 | leency | 12 | void set_image(); |
7151 | leency | 13 | dword get_pixel(); |
7089 | leency | 14 | dword get_image(); |
7096 | leency | 15 | void move(); |
7150 | leency | 16 | }; |
7089 | leency | 17 | |
7155 | leency | 18 | void _image::create(int _rows, _columns) |
7089 | leency | 19 | { |
7155 | leency | 20 | int i; |
21 | rows = _rows; |
||
22 | columns = _columns; |
||
23 | for (i = 0; i < columns*rows; i++) mas[i]=0xBFCAD2; |
||
24 | } |
||
25 | |||
26 | void _image::set_pixel(int _r, _c, _color) |
||
27 | { |
||
7151 | leency | 28 | mas[columns*_r + _c] = _color; |
7089 | leency | 29 | } |
30 | |||
7254 | leency | 31 | void _image::draw_line(int x1, int y1, int x2, int y2, dword color) { |
32 | int dx, dy, signX, signY, error, error2; |
||
33 | |||
34 | dx = x2 - x1; |
||
35 | |||
36 | if (dx < 0) |
||
37 | dx = -dx; |
||
38 | |||
39 | dy = y2 - y1; |
||
40 | |||
41 | if (dy < 0) |
||
42 | dy = -dy; |
||
43 | |||
44 | if (x1 < x2) |
||
45 | signX = 1; |
||
46 | else |
||
47 | signX = -1; |
||
48 | |||
49 | if (y1 < y2) |
||
50 | signY = 1; |
||
51 | else |
||
52 | signY = -1; |
||
53 | |||
54 | error = dx - dy; |
||
55 | |||
56 | set_pixel(y2, x2, color); |
||
57 | |||
58 | while((x1 != x2) || (y1 != y2)) |
||
59 | { |
||
60 | set_pixel(y1, x1, color); |
||
61 | |||
62 | error2 = error * 2; |
||
63 | |||
64 | if(error2 > calc(-dy)) |
||
65 | { |
||
66 | error -= dy; |
||
67 | x1 += signX; |
||
68 | } |
||
69 | |||
70 | if(error2 < dx) |
||
71 | { |
||
72 | error += dx; |
||
73 | y1 += signY; |
||
74 | } |
||
75 | } |
||
76 | } |
||
77 | |||
78 | void _image::fill(int _r, _c, _color) |
||
79 | { |
||
80 | #define MARKED 6 |
||
81 | int r, c, i, restart; |
||
82 | |||
83 | dword old_color = get_pixel(_r, _c); |
||
84 | set_pixel(_r, _c, MARKED); |
||
85 | |||
86 | do { |
||
87 | restart=false; |
||
88 | for (r = 0; r < rows; r++) |
||
89 | for (c = 0; c < columns; c++) |
||
90 | { |
||
91 | IF (get_pixel(r,c) != old_color) continue; |
||
92 | IF (get_pixel(r,c) == MARKED) continue; |
||
93 | |||
94 | IF (c>0) && (get_pixel(r,c-1) == MARKED) set_pixel(r,c,MARKED); |
||
95 | IF (r>0) && (get_pixel(r-1,c) == MARKED) set_pixel(r,c,MARKED); |
||
96 | IF (c |
||
97 | IF (r |
||
98 | |||
99 | IF (get_pixel(r,c)==MARKED) restart=true; |
||
100 | } |
||
101 | }while(restart); |
||
102 | |||
103 | for (i=0; i |
||
104 | IF (mas[i]==MARKED) mas[i] = _color; |
||
105 | } |
||
106 | |||
7155 | leency | 107 | dword _image::get_pixel(int _r, _c) |
7089 | leency | 108 | { |
7151 | leency | 109 | return mas[columns*_r + _c]; |
7089 | leency | 110 | } |
111 | |||
7156 | leency | 112 | void _image::set_image(dword _inbuf) |
113 | { |
||
114 | dword i; |
||
115 | for (i = 0; i < columns*rows; i++;) |
||
116 | { |
||
7190 | leency | 117 | // mas[i] = ESDWORD[i*4+_inbuf] & 0x00FFFFFF; //for x32 bit color |
118 | mas[i] = ESDWORD[i*3+_inbuf] & 0xFFFFFF; |
||
7156 | leency | 119 | } |
120 | } |
||
121 | |||
7155 | leency | 122 | dword _image::get_image() |
7089 | leency | 123 | { |
124 | int r=0, c=0; |
||
125 | dword i; |
||
126 | |||
7151 | leency | 127 | free(img); |
128 | i = img = malloc(rows*columns*3); |
||
7089 | leency | 129 | |
130 | for (r = 0; r < rows; r++) |
||
131 | for (c = 0; c < columns; c++) |
||
132 | { |
||
7151 | leency | 133 | rgb.DwordToRgb(get_pixel(r,c)); |
7089 | leency | 134 | ESBYTE[i] = rgb.b; |
135 | ESBYTE[i+1] = rgb.g; |
||
136 | ESBYTE[i+2] = rgb.r; |
||
137 | i += 3; |
||
138 | } |
||
7151 | leency | 139 | return img; |
7089 | leency | 140 | } |
141 | |||
7096 | leency | 142 | enum { |
7151 | leency | 143 | MOVE_LEFT, |
144 | MOVE_RIGHT, |
||
145 | MOVE_UP, |
||
146 | MOVE_DOWN, |
||
147 | FLIP_VER, |
||
148 | FLIP_HOR, |
||
149 | ROTE |
||
7096 | leency | 150 | }; |
7155 | leency | 151 | void _image::move(int _direction) |
7096 | leency | 152 | { |
153 | int r, c; |
||
154 | dword first_element_data; |
||
155 | |||
7154 | leency | 156 | switch(_direction) |
7096 | leency | 157 | { |
7154 | leency | 158 | case MOVE_LEFT: |
159 | for (r = 0; r < rows; r++) |
||
160 | { |
||
161 | first_element_data = get_pixel(r, 0); |
||
162 | for (c = 0; c < columns-1; c++) set_pixel(r, c, get_pixel(r, c+1)); |
||
163 | set_pixel(r, columns-1, first_element_data); |
||
164 | } |
||
165 | break; |
||
166 | case MOVE_RIGHT: |
||
167 | for (r = 0; r < rows; r++) |
||
168 | { |
||
169 | first_element_data = get_pixel(r, columns-1); |
||
170 | for (c = columns-1; c > 0; c--) set_pixel(r, c, get_pixel(r, c-1)); |
||
171 | set_pixel(r, 0, first_element_data); |
||
172 | } |
||
173 | break; |
||
174 | case MOVE_UP: |
||
175 | for (c = 0; c < columns; c++) |
||
176 | { |
||
177 | first_element_data = get_pixel(0, c); |
||
178 | for (r = 0; r < rows-1; r++) set_pixel(r, c, get_pixel(r+1, c)); |
||
179 | set_pixel(rows-1, c, first_element_data); |
||
180 | } |
||
181 | break; |
||
182 | case MOVE_DOWN: |
||
183 | for (c = 0; c < columns; c++) |
||
184 | { |
||
185 | first_element_data = get_pixel(rows-1, c); |
||
186 | for (r = rows-1; r > 0; r--) set_pixel(r, c, get_pixel(r-1, c)); |
||
187 | set_pixel(0, c, first_element_data); |
||
188 | } |
||
189 | break; |
||
190 | case FLIP_HOR: |
||
191 | for (r = 0; r < rows; r++) |
||
192 | for (c = 0; c < columns/2; c++) { |
||
193 | first_element_data = get_pixel(r, c); |
||
194 | set_pixel(r, c, get_pixel(r, columns-c-1)); |
||
195 | set_pixel(r, columns-c-1, first_element_data); |
||
196 | } |
||
197 | break; |
||
198 | case FLIP_VER: |
||
199 | for (c = 0; c < columns; c++) |
||
200 | for (r = 0; r < rows/2; r++) { |
||
201 | first_element_data = get_pixel(r, c); |
||
202 | set_pixel(r, c, get_pixel(rows-r-1, c)); |
||
203 | set_pixel(rows-r-1, c, first_element_data); |
||
204 | } |
||
205 | break; |
||
7096 | leency | 206 | } |
207 | }>>>>>>>>>>>>>>>>>>>>> |
||
7147 | leency | 208 |