Subversion Repositories Kolibri OS

Rev

Rev 7156 | Rev 7254 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. struct _image
  2. {
  3.         unsigned rows, columns;
  4.         dword mas[32*32];
  5.         dword img;
  6.         void create();
  7.         void set_pixel();
  8.         void set_image();
  9.         dword get_pixel();
  10.         dword get_image();
  11.         void move();
  12. };
  13.  
  14. void _image::create(int _rows, _columns)
  15. {
  16.         int i;
  17.         rows = _rows;
  18.         columns = _columns;
  19.         for (i = 0; i < columns*rows; i++) mas[i]=0xBFCAD2;
  20. }
  21.  
  22. void _image::set_pixel(int _r, _c, _color)
  23. {
  24.         mas[columns*_r + _c] = _color;
  25. }
  26.  
  27. dword _image::get_pixel(int _r, _c)
  28. {
  29.         return mas[columns*_r + _c];
  30. }
  31.  
  32. void _image::set_image(dword _inbuf)
  33. {
  34.         dword i;
  35.         for (i = 0; i < columns*rows; i++;)
  36.         {
  37.                 // mas[i] = ESDWORD[i*4+_inbuf] & 0x00FFFFFF; //for x32 bit color
  38.                 mas[i] = ESDWORD[i*3+_inbuf] & 0xFFFFFF;
  39.         }
  40. }
  41.  
  42. dword _image::get_image()
  43. {
  44.         int r=0, c=0;
  45.         dword i;
  46.  
  47.         free(img);
  48.         i = img = malloc(rows*columns*3);
  49.  
  50.         for (r = 0; r < rows; r++)
  51.                 for (c = 0; c < columns; c++)
  52.                 {
  53.                         rgb.DwordToRgb(get_pixel(r,c));
  54.                         ESBYTE[i] = rgb.b;
  55.                         ESBYTE[i+1] = rgb.g;
  56.                         ESBYTE[i+2] = rgb.r;
  57.                         i += 3;
  58.                 }
  59.         return img;
  60. }
  61.  
  62. enum {
  63.         MOVE_LEFT,
  64.         MOVE_RIGHT,
  65.         MOVE_UP,
  66.         MOVE_DOWN,
  67.         FLIP_VER,
  68.         FLIP_HOR,
  69.         ROTE
  70. };
  71. void _image::move(int _direction)
  72. {
  73.         int r, c;
  74.         dword first_element_data;
  75.  
  76.         switch(_direction)
  77.         {
  78.                 case MOVE_LEFT:
  79.                                 for (r = 0; r < rows; r++)
  80.                                 {
  81.                                         first_element_data = get_pixel(r, 0);
  82.                                         for (c = 0; c < columns-1; c++) set_pixel(r, c, get_pixel(r, c+1));
  83.                                         set_pixel(r, columns-1, first_element_data);
  84.                                 }
  85.                                 break;
  86.                 case MOVE_RIGHT:
  87.                                 for (r = 0; r < rows; r++)
  88.                                 {
  89.                                         first_element_data = get_pixel(r, columns-1);
  90.                                         for (c = columns-1; c > 0; c--) set_pixel(r, c, get_pixel(r, c-1));
  91.                                         set_pixel(r, 0, first_element_data);
  92.                                 }      
  93.                                 break; 
  94.                 case MOVE_UP:
  95.                                 for (c = 0; c < columns; c++)
  96.                                 {
  97.                                         first_element_data = get_pixel(0, c);
  98.                                         for (r = 0; r < rows-1; r++) set_pixel(r, c, get_pixel(r+1, c));
  99.                                         set_pixel(rows-1, c, first_element_data);
  100.                                 }      
  101.                                 break;
  102.                 case MOVE_DOWN:
  103.                                 for (c = 0; c < columns; c++)
  104.                                 {
  105.                                         first_element_data = get_pixel(rows-1, c);
  106.                                         for (r = rows-1; r > 0; r--) set_pixel(r, c, get_pixel(r-1, c));
  107.                                         set_pixel(0, c, first_element_data);
  108.                                 }
  109.                                 break;
  110.                 case FLIP_HOR:
  111.                                 for (r = 0; r < rows; r++)
  112.                                         for (c = 0; c < columns/2; c++) {
  113.                                                 first_element_data = get_pixel(r, c);
  114.                                                 set_pixel(r, c, get_pixel(r, columns-c-1));
  115.                                                 set_pixel(r, columns-c-1, first_element_data);
  116.                                         }
  117.                                 break;
  118.                 case FLIP_VER:
  119.                                 for (c = 0; c < columns; c++)
  120.                                         for (r = 0; r < rows/2; r++) {
  121.                                                 first_element_data = get_pixel(r, c);
  122.                                                 set_pixel(r, c, get_pixel(rows-r-1, c));
  123.                                                 set_pixel(rows-r-1, c, first_element_data);
  124.                                         }
  125.                                 break; 
  126.         }
  127. }
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.