kolibrios/programs/cmm/iconedit/colors_mas.h

135 lines
2.7 KiB
C
Raw Normal View History

struct _image
{
unsigned rows, columns;
dword mas[32*32];
dword img;
void create();
void set_pixel();
void set_image();
dword get_pixel();
dword get_image();
void move();
};
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)
{
mas[columns*_r + _c] = _color;
}
dword _image::get_pixel(int _r, _c)
{
return mas[columns*_r + _c];
}
void _image::set_image(dword _inbuf)
{
dword i;
for (i = 0; i < columns*rows; i++;)
{
// mas[i] = ESDWORD[i*4+_inbuf] & 0x00FFFFFF; //for x32 bit color
mas[i] = ESDWORD[i*3+_inbuf] & 0xFFFFFF;
}
}
dword _image::get_image()
{
int r=0, c=0;
dword i;
free(img);
i = img = malloc(rows*columns*3);
for (r = 0; r < rows; r++)
for (c = 0; c < columns; c++)
{
rgb.DwordToRgb(get_pixel(r,c));
ESBYTE[i] = rgb.b;
ESBYTE[i+1] = rgb.g;
ESBYTE[i+2] = rgb.r;
i += 3;
}
return img;
}
enum {
MOVE_LEFT,
MOVE_RIGHT,
MOVE_UP,
MOVE_DOWN,
FLIP_VER,
FLIP_HOR,
ROTE
};
void _image::move(int _direction)
{
int r, c;
dword first_element_data;
switch(_direction)
{
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;
}
}