示例#1
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;
                        }
                    }
                }
            }
        }
示例#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++)
                {
                    // проверяем, не является ли данная кисть - стеркой
                    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;
                        }
                    }

                    // сигнал о создании новго дисплейного списка
                }
            }
        }