Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 22.12.2012
Сообщений: 7
1

Как реализовать заливку фигур

22.12.2012, 18:32. Показов 2808. Ответов 1
Метки нет (Все метки)

В универе на каникулы задали сделать пеинт в СиШарпе, и вот имею пару вопросов:

1)Как реализовать заливку?

2)Вот я имею код рисования квадрата:

C#
1
2
3
4
5
6
7
8
9
10
if (rdbKwadrat.Checked)
                {
                    
                    Szerokosc = e.Location.X - Punkt.X;
                    Wysokosc = Szerokosc;
                    
                    Rysownica.DrawRectangle(Pioro, new Rectangle(Punkt.X, Punkt.Y, Szerokosc, Wysokosc));
                    
                    imgRysownica.Refresh();
                };
Как сделать чтоб оно рисовалось не только в правый нижний угол, а во все стороны, и чтоб при рисовании етого
самого квадрата было видно анимацию так как в пейнте, а то у меня етот квадрат появляется только когда я выделил область уже отпустил кнопку миши.

3)Я имею две формы, в главной сам пеинт, второй откривается при создании нового рисунка. Вопрос: как из текстбоксов второй формы передать значения переменным первой формы(например: розмер,цвет страницы для рисования)?

Заранее спасибо.

Добавлено через 4 часа 55 минут
Со вторым справился
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tmSzerokosc = e.Location.X - tmPunkt.X;
                    if (tmPunkt.X > e.Location.X)
                    {
                        tmPunkt.X = e.Location.X;
                        tmSzerokosc = Math.Abs(tmSzerokosc);
 
                    };
                    if (tmPunkt.Y > e.Location.Y)
                    {
                        tmPunkt.Y = e.Location.Y;
                    };
                    
                    tmWysokosc = tmSzerokosc;
                    
                    tmRysownica.DrawRectangle(tmPioro, new Rectangle(tmPunkt.X, tmPunkt.Y, tmSzerokosc, tmWysokosc));
                    
                    tmImgRysownica.Refresh();
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2012, 18:32
Ответы с готовыми решениями:

Реализовать градиентную заливку
мне нужен метод заливки который бы получал на вход точку на изображении и заливал все от этой этой...

Реализовать движение фигур
Всем привет. Помогите плиз. Есть код на C# в котором рисуется фигура квадрата в звезде....

Как выполнить заливку нарисованной фигуры?
Создана программа - графический редактор. Допустим нарисован овал, как выполнить его заливку? С# ...

Как реализовать заливку фигур в консоли?
Например фигуры Ellipse, контур одного цвета получается, а заливка цвета текста консольного - надо...

1
0 / 0 / 1
Регистрация: 22.12.2012
Сообщений: 7
25.12.2012, 20:45  [ТС] 2
Делаю простенький графический редактор на подобе Пеинт. Застрял на реализации заливки. В инете нашел класс етой самой заливки, но фиг знает как его использовать т.к. еще совсем зеленый в программировании.
Вот собственно код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//класс заливки
        //
        public class FastBitmap
        {
            private Bitmap _bmp;
            private BitmapData _bmd;
            private IntPtr _pdata;
            private byte[] _prgb_values;
            private int _stride;
            private bool _locked;
            private int _nbytes;
 
            public FastBitmap(Bitmap bmp)
            {
                _bmp = bmp;
                _locked = false;
            }
 
            public Bitmap Image
            {
                get { return _bmp; }
            }
 
            public void Lock()
            {
                _bmd = _bmp.LockBits(new Rectangle(new Point(0, 0), _bmp.Size), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
                _pdata = _bmd.Scan0;
                _stride = _bmd.Stride;
                _nbytes = _stride * _bmp.Height;
                _prgb_values = new byte[_nbytes];
                Marshal.Copy(_pdata, _prgb_values, 0, _nbytes);
                _locked = true;
            }
 
            public Color GetPixel(int x, int y)
            {
                if (!_locked) Lock();
                int index = _stride * y + 3 * x;
                int b = _prgb_values[index];
                int g = _prgb_values[index + 1];
                int r = _prgb_values[index + 2];
                return Color.FromArgb(r, g, b);
            }
 
            public void SetPixel(int x, int y, Color clr)
            {
                if (!_locked) Lock();
                int index = _stride * y + 3 * x;
                _prgb_values[index] = clr.B;
                _prgb_values[index + 1] = clr.G;
                _prgb_values[index + 2] = clr.R;
            }
 
            public void Unlock()
            {
                Marshal.Copy(_prgb_values, 0, _pdata, _nbytes);
                _bmp.UnlockBits(_bmd);
                _locked = false;
            }
        }
 
 
        public Form1()
        {
            InitializeComponent();
            tmImgRysownica.Image = new Bitmap(tmImgRysownica.Width, tmImgRysownica.Height);
            tmRysownica = Graphics.FromImage(tmImgRysownica.Image);
            tmImgRysownica.BorderStyle = BorderStyle.Fixed3D;
            tmImgRysownica.BackColor = Color.White;
        }
 
        private void tmImgRysownica_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                tmPunkt = e.Location;
            if (e.Button == MouseButtons.Left && tmFg == 2)
            {   //
                //
                //ЧТО ВОТ СЮДА ВПИСАТЬ
                //
                //
                //ЧТОБЫ ИСПОЛЬЗОВАЛСЯ ТОТ КЛАСС FastBitmap
                //
                //И РАБОТАЛА ЗАЛИВКА
                //
            };
        }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2012, 20:45

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Необходимо реализовать заливку фигур на канве
Здравствуйте, нужна помощь с заливкой фигуры на канве. Если более подробно, то предположим я...

Как грамотно реализовать заливку?
уважаемые! есть задача раскрасить активную зону в зависимости от температуры твс заливка...

Как реализовать заливку нарисованной фигуры?
Пишу Paint на wpf. Возникла проблема - не знаю как реализовать заливку нарисованной фигуры. Помню в...

Составить программу, которая рисует домик. Радиус ввести с клавиатуры.Сделать заливку фигур
program PROG2; uses GraphABC; const w=5; begin SetWindowSize(256,256);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.