// конструктор класса public anEngine(int size_x, int size_y, int screen_w, int screen_h) { // при инициализации экземпляра класса сохраним настройки // размеров элементов и изображения в локальных переменных picture_size_x = size_x; picture_size_y = size_y; screen_width = screen_w; screen_height = screen_h; // полосы прокрутки у нас пока отсутствуют, поэтому просто обнулим значение переменных scroll_x = 0; scroll_y = 0; // добавим новый слой для работы, пока что он будет единственным Layers.Add(new anLayer(picture_size_x, picture_size_y)); // номер активного слоя - 0 ActiveLayerNom = 0; // и создадим стандартную кисть // standartBrush = new anBrush("brush-1.bmp"); standartBrush = new anBrush(3, false); }
public anEngine(int size_x, int size_y, int screen_w, int screen_h) { picture_size_x = size_x; picture_size_y = size_y; screen_width = screen_w; screen_height = screen_h; scroll_x = 0; scroll_y = 0; Layers.Add(new anLayer(picture_size_x, picture_size_y)); ActiveLayerNom = 0; standartBrush = new anBrush(3, false); }
public anEngine(int size_x, int size_y, int screen_w, int screen_h) { picture_size_x = size_x; picture_size_y = size_y; screen_width = screen_w; screen_height = screen_h; scroll_x = 0; scroll_y = 0; Layers.Add(new anLayer(picture_size_x, picture_size_y)); // номер активного слоя - 0 ActiveLayerNom = 0; // standartBrush = new anBrush("brush-1.bmp"); standartBrush = new anBrush(3, false); }
// установка кисти из файла public void SetBrushFromFile(string FileName) { standartBrush = new anBrush(FileName); }
public void SetSpecialBrush(int Nom) { standartBrush = new anBrush(Nom, true); }
public void SetStandartBrush(int SizeB) { standartBrush = new anBrush(SizeB, false); }
public void Draw(anBrush BR, int x, int y) { int real_pos_draw_start_x = x - BR.myBrush.Width / 2; int real_pos_draw_start_y = y - BR.myBrush.Height / 2; if (real_pos_draw_start_x < 0) { real_pos_draw_start_x = 0; } if (real_pos_draw_start_y < 0) { real_pos_draw_start_y = 0; } int boundary_x = real_pos_draw_start_x + BR.myBrush.Width; int boundary_y = real_pos_draw_start_y + BR.myBrush.Height; if (boundary_x > Width) { boundary_x = Width; } if (boundary_y > Heigth) { boundary_y = Heigth; } int count_x = 0, count_y = 0; for (int ax = real_pos_draw_start_x; ax < boundary_x; ax++, count_x++) { count_y = 0; for (int bx = real_pos_draw_start_y; bx < boundary_y; bx++, count_y++) { if (BR.IsBrushErase()) { Color ret = BR.myBrush.GetPixel(count_x, count_y); // цвет не красный if (!(ret.R == 255 && ret.G == 0 && ret.B == 0)) { DrawPlace[ax, bx, 3] = 1; } } else { //текущий цвет пикселя маски Color ret = BR.myBrush.GetPixel(count_x, count_y); // цвет не красный if (!(ret.R == 255 && ret.G == 0 && ret.B == 0)) { DrawPlace[ax, bx, 0] = ActiveColor.R; DrawPlace[ax, bx, 1] = ActiveColor.G; DrawPlace[ax, bx, 2] = ActiveColor.B; DrawPlace[ax, bx, 3] = 0; } } } } }
// функция рисования // получает в качестве параметров кисть, для рисования и координаты, // где сейчас необходимо перерисовать перерисовать пиксели заданной кистью public void Draw(anBrush BR, int x, int y) { // функция лжевидимости кисти(не запускается) // определяем позиция старта рисования int real_pos_draw_start_x = x - BR.myBrush.Width / 2; int real_pos_draw_start_y = y - BR.myBrush.Height / 2; // корректируем ее для не выхода за границы массива // проверка на отрицательные значения (граница "слава") if (real_pos_draw_start_x < 0) { real_pos_draw_start_x = 0; } if (real_pos_draw_start_y < 0) { real_pos_draw_start_y = 0; } // проверки на выход за границу "справа" int boundary_x = real_pos_draw_start_x + BR.myBrush.Width; int boundary_y = real_pos_draw_start_y + BR.myBrush.Height; if (boundary_x > Width) { boundary_x = Width; } if (boundary_y > Heigth) { boundary_y = Heigth; } // счетчик пройденных строк и столбцов массива, представляющего собой маску кисти int count_x = 0, count_y = 0; // циклы по области, с учетом смещения кисти и коорекции для невыхода за границы массива for (int ax = real_pos_draw_start_x; ax < boundary_x; ax++, count_x++) { count_y = 0; for (int bx = real_pos_draw_start_y; bx < boundary_y; bx++, count_y++) { // проверяем, не является ли данная кисть - стеркой if (BR.IsBrushErase()) { // данная кисть - стерка. // помечаем данный пиксель как незакрашенный // получаем текущий цвет пикселя маски Color ret = BR.myBrush.GetPixel(count_x, count_y); // цвет не красный if (!(ret.R == 255 && ret.G == 0 && ret.B == 0)) { // заполняем данный пиксель соотвествующим из маски, используя активный цвет DrawPlace[ax, bx, 3] = 1; } } else { // получаем текущий цвет пикселя маски Color ret = BR.myBrush.GetPixel(count_x, count_y); // цвет не красный if (!(ret.R == 255 && ret.G == 0 && ret.B == 0)) { // заполняем данный пиксель соотвествующим из маски, используя активный цвет DrawPlace[ax, bx, 0] = ActiveColor.R; DrawPlace[ax, bx, 1] = ActiveColor.G; DrawPlace[ax, bx, 2] = ActiveColor.B; DrawPlace[ax, bx, 3] = 0; } } // сигнал о создании новго дисплейного списка } } }