Exemple #1
0
 // конструктор класса
 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(3, false);
 }
Exemple #2
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++)
            //        {
            //            // получаем текущий цвет пикселя маски
            //            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;
            //            }
            //        }
            //    }
            // цикл по области с учетом смещения кисти и коррекции для невыхода за границы массива
            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;
                        }
                    }
                }
            }
        }
Exemple #3
0
 // функция установки стандартной кисти, передается только размер
 public void SetStandartBrush(int SizeB)
 {
     standartBrush = new anBrush(SizeB, false);
 }
Exemple #4
0
 // установка кисти из файла
 public void SetBrushFromFile(string FileName)
 {
     standartBrush = new anBrush(FileName);
 }
Exemple #5
0
 // функция установки специальной кисти
 public void SetSpecialBrush(int Nom)
 {
     standartBrush = new anBrush(Nom, true);
 }