2018-02-09 17:46:59 +01:00
|
|
|
struct _image
|
2017-10-12 01:19:28 +02:00
|
|
|
{
|
|
|
|
unsigned rows, columns;
|
2018-02-07 23:09:46 +01:00
|
|
|
dword mas[32*32];
|
|
|
|
dword img;
|
2018-02-09 17:46:59 +01:00
|
|
|
void create();
|
2018-02-07 23:09:46 +01:00
|
|
|
void set_pixel();
|
2018-02-10 12:47:33 +01:00
|
|
|
void set_image();
|
2018-02-07 23:09:46 +01:00
|
|
|
dword get_pixel();
|
2017-10-12 01:19:28 +02:00
|
|
|
dword get_image();
|
2017-10-17 01:41:50 +02:00
|
|
|
void move();
|
2018-02-07 17:02:34 +01:00
|
|
|
};
|
2017-10-12 01:19:28 +02:00
|
|
|
|
2018-02-09 17:46:59 +01:00
|
|
|
void _image::create(int _rows, _columns)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
rows = _rows;
|
|
|
|
columns = _columns;
|
|
|
|
for (i = 0; i < columns*rows; i++) mas[i]=0xBFCAD2;
|
|
|
|
}
|
|
|
|
|
|
|
|
void _image::set_pixel(int _r, _c, _color)
|
2017-10-12 01:19:28 +02:00
|
|
|
{
|
2018-02-07 23:09:46 +01:00
|
|
|
mas[columns*_r + _c] = _color;
|
2017-10-12 01:19:28 +02:00
|
|
|
}
|
|
|
|
|
2018-02-09 17:46:59 +01:00
|
|
|
dword _image::get_pixel(int _r, _c)
|
2017-10-12 01:19:28 +02:00
|
|
|
{
|
2018-02-07 23:09:46 +01:00
|
|
|
return mas[columns*_r + _c];
|
2017-10-12 01:19:28 +02:00
|
|
|
}
|
|
|
|
|
2018-02-10 12:47:33 +01:00
|
|
|
void _image::set_image(dword _inbuf)
|
|
|
|
{
|
|
|
|
dword i;
|
|
|
|
for (i = 0; i < columns*rows; i++;)
|
|
|
|
{
|
2018-03-16 21:34:44 +01:00
|
|
|
// mas[i] = ESDWORD[i*4+_inbuf] & 0x00FFFFFF; //for x32 bit color
|
|
|
|
mas[i] = ESDWORD[i*3+_inbuf] & 0xFFFFFF;
|
2018-02-10 12:47:33 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-02-09 17:46:59 +01:00
|
|
|
dword _image::get_image()
|
2017-10-12 01:19:28 +02:00
|
|
|
{
|
|
|
|
int r=0, c=0;
|
|
|
|
dword i;
|
|
|
|
|
2018-02-07 23:09:46 +01:00
|
|
|
free(img);
|
|
|
|
i = img = malloc(rows*columns*3);
|
2017-10-12 01:19:28 +02:00
|
|
|
|
|
|
|
for (r = 0; r < rows; r++)
|
|
|
|
for (c = 0; c < columns; c++)
|
|
|
|
{
|
2018-02-07 23:09:46 +01:00
|
|
|
rgb.DwordToRgb(get_pixel(r,c));
|
2017-10-12 01:19:28 +02:00
|
|
|
ESBYTE[i] = rgb.b;
|
|
|
|
ESBYTE[i+1] = rgb.g;
|
|
|
|
ESBYTE[i+2] = rgb.r;
|
|
|
|
i += 3;
|
|
|
|
}
|
2018-02-07 23:09:46 +01:00
|
|
|
return img;
|
2017-10-12 01:19:28 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 01:41:50 +02:00
|
|
|
enum {
|
2018-02-07 23:09:46 +01:00
|
|
|
MOVE_LEFT,
|
|
|
|
MOVE_RIGHT,
|
|
|
|
MOVE_UP,
|
|
|
|
MOVE_DOWN,
|
|
|
|
FLIP_VER,
|
|
|
|
FLIP_HOR,
|
|
|
|
ROTE
|
2017-10-17 01:41:50 +02:00
|
|
|
};
|
2018-02-09 17:46:59 +01:00
|
|
|
void _image::move(int _direction)
|
2017-10-17 01:41:50 +02:00
|
|
|
{
|
|
|
|
int r, c;
|
|
|
|
dword first_element_data;
|
|
|
|
|
2018-02-08 17:47:35 +01:00
|
|
|
switch(_direction)
|
2017-10-17 01:41:50 +02:00
|
|
|
{
|
2018-02-08 17:47:35 +01:00
|
|
|
case MOVE_LEFT:
|
|
|
|
for (r = 0; r < rows; r++)
|
|
|
|
{
|
|
|
|
first_element_data = get_pixel(r, 0);
|
|
|
|
for (c = 0; c < columns-1; c++) set_pixel(r, c, get_pixel(r, c+1));
|
|
|
|
set_pixel(r, columns-1, first_element_data);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case MOVE_RIGHT:
|
|
|
|
for (r = 0; r < rows; r++)
|
|
|
|
{
|
|
|
|
first_element_data = get_pixel(r, columns-1);
|
|
|
|
for (c = columns-1; c > 0; c--) set_pixel(r, c, get_pixel(r, c-1));
|
|
|
|
set_pixel(r, 0, first_element_data);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case MOVE_UP:
|
|
|
|
for (c = 0; c < columns; c++)
|
|
|
|
{
|
|
|
|
first_element_data = get_pixel(0, c);
|
|
|
|
for (r = 0; r < rows-1; r++) set_pixel(r, c, get_pixel(r+1, c));
|
|
|
|
set_pixel(rows-1, c, first_element_data);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case MOVE_DOWN:
|
|
|
|
for (c = 0; c < columns; c++)
|
|
|
|
{
|
|
|
|
first_element_data = get_pixel(rows-1, c);
|
|
|
|
for (r = rows-1; r > 0; r--) set_pixel(r, c, get_pixel(r-1, c));
|
|
|
|
set_pixel(0, c, first_element_data);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FLIP_HOR:
|
|
|
|
for (r = 0; r < rows; r++)
|
|
|
|
for (c = 0; c < columns/2; c++) {
|
|
|
|
first_element_data = get_pixel(r, c);
|
|
|
|
set_pixel(r, c, get_pixel(r, columns-c-1));
|
|
|
|
set_pixel(r, columns-c-1, first_element_data);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FLIP_VER:
|
|
|
|
for (c = 0; c < columns; c++)
|
|
|
|
for (r = 0; r < rows/2; r++) {
|
|
|
|
first_element_data = get_pixel(r, c);
|
|
|
|
set_pixel(r, c, get_pixel(rows-r-1, c));
|
|
|
|
set_pixel(rows-r-1, c, first_element_data);
|
|
|
|
}
|
|
|
|
break;
|
2018-02-07 23:09:46 +01:00
|
|
|
}
|
2017-10-17 01:41:50 +02:00
|
|
|
}
|
2018-02-05 00:12:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|