示例#1
0
        // конструктор класса
        public anEngine(int size_x, int size_y, int screen_w, int screen_h)
        {
            // создание кисти по умолчанию
            standartBrush = new anBrush(3, false);

            // при инициализации экземпляра класса сохраним настройки
            // размеров элементов и изображения в локальных переменных

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