188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
1

Как рисовать на форме

02.05.2012, 17:25. Показов 5303. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть файл его надо быстро рисовать на форме, подскажите как ?

Добавлено через 30 секунд
или желательно нарисовать изобаржение быстро в буфере а затем его вывести на экран
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2012, 17:25
Ответы с готовыми решениями:

Как рисовать в форме?
В качестве примера, изобразите, пожалуйста, какую-нибудь прямую.

Как рисовать на форме?
Как рисовать на форме ,используя графические примитивы ? (например :...

Как рисовать на форме? Пользуюсь MVP паттерном
День добрый! У меня или навык гугленья сломался или что-то еще, поэтому прошу помощи реальных...

Как рисовать линии и делать заливку по частям на форме?
как нарисовать линию не через програмный код, а визуально? например мне надо разделить форму на 2...

3
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
02.05.2012, 18:26 2
Я так понимаю вам надо двойная буферизация (чтоб не мигало)?
0
2 / 2 / 2
Регистрация: 01.05.2012
Сообщений: 58
02.05.2012, 21:09 3
Советую Вам изучить этот код
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
using System;
using System.Windows.Forms;
using System.Drawing;
 
class FunWithTheMouse : Form
{
    // Объявляем объекты, доступные для разных методов
 
    PictureBox pictureBox1;
    Label label1;
    Point spotClicked;
 
    // Метод-конструктор нашего класса
    public FunWithTheMouse()
    {
        // Задаем размеры окна
 
        this.Size = new Size(640, 480);
 
        // Загружаем рисунок в элемент PictureBox и вставляем в форму
 
        pictureBox1 = new PictureBox();
        pictureBox1.Image = (Image)new Bitmap(@"../../images/Dog.bmp");
        pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
        pictureBox1.Dock = DockStyle.Fill;
        this.Controls.Add(pictureBox1);
 
        // Добавляем метку с инструкциями в нижнюю часть экрана
 
        label1 = new Label();
        label1.BackColor = Color.Wheat;
        label1.Dock = DockStyle.Bottom;
        label1.Text =
        "При нажатой левой кнопке мыши можно рисовать прямоугольники. " +
        "Нажатая правая кнопка изменяет яркость выделенного прямоугольника " +
        "Нажав SHIFT и перемещая мышь, рисуем желтые кружки.";
        label1.TextAlign = ContentAlignment.MiddleCenter;
        this.Controls.Add(label1);
 
        // Привязываем PictureBox к обработчикам событий мыши
 
        this.pictureBox1.MouseDown += new MouseEventHandler(MouseButtonIsDown);
        this.pictureBox1.MouseUp += new MouseEventHandler(MouseButtonIsUp);
        this.pictureBox1.MouseMove += new MouseEventHandler(TheMouseMoved);
    }
 
    // Обработчик событий, срабатывающий при ПЕРЕМЕЩЕНИИ мыши
    public void TheMouseMoved(object sender, MouseEventArgs e)
    {
        // Если на клавиатуре нажата клавиша SHIFT
        if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        {
            // Подготовка области рисования на изображении
            System.Drawing.Graphics g = this.pictureBox1.CreateGraphics();
 
            // Используем желтое перо
            System.Drawing.Pen yellowPen = new System.Drawing.Pen(Color.Yellow, 3);
 
            // Рисуем окружность (эллипс, вписанный в квадрат)
            // Верхний левый угол квадрата имеет координаты X и Y текущего положения мыши
            g.DrawEllipse(yellowPen, e.X, e.Y, 40, 40);
 
            // Очистка
            g.Dispose();
        }
    }
 
    // Обработчик событий, срабатывающий при НАЖАТИИ кнопки мыши
    public void MouseButtonIsDown(object sender, MouseEventArgs e)
    {
        // Запоминаем точку, в которой произошло нажатие кнопки мыши. Когда
        // кнопка будет отпущена, нам понадобятся ее координаты
 
        spotClicked.X = e.X;// горизонтальная координата
        spotClicked.Y = e.Y;// вертикальная координата
    }
 
    // Обработчик событий, срабатывающий при ОТЖАТИИ кнопки мыши
    public void MouseButtonIsUp(object sender, MouseEventArgs e)
    {
        /* Пользователь отпустил кнопку мыши! */
 
        // Создаем прямоугольник (пока он еще не виден), ограничивающий
        // область изображения, с которой пользователь будет работать
 
        Rectangle r = new Rectangle();
 
        // Левый верхний угол соответствует точке, в которой была нажата кнопка мыши
        // Мы сохранили ее координаты с помощью описанного выше метода
 
        r.X = spotClicked.X;
        r.Y = spotClicked.Y;
 
        // Ширина и высота прямоугольника вычисляется
        // путем вычитания начальных координат мыши (в точке нажатия)
        // из текущих координат (в точке отжатия кнопки)
 
        r.Width = e.X - spotClicked.X;
        r.Height = e.Y - spotClicked.Y;
 
        if (e.Button == MouseButtons.Left)
        {
            /* Если была нажата и отпущена левая кнопка мыши
            рисуем видимый контур прямоугольника */
 
            // Подготовка области рисования на изображении
 
            Graphics g = this.pictureBox1.CreateGraphics();
 
            // Рисуем красный контур прямоугольника
 
            Pen redPen = new Pen(Color.Red, 2);
            g.DrawRectangle(redPen, r);
        }
        else
        {
            // Если была нажата другая кнопка, вызываем более сложный
            // метод, подсвечивающий область изображения
 
            ChangeLightness(r);
        }
    }
 
    // Метод, увеличивающий яркость выбранного участка изображения
    // путем увеличения яркости каждого пикселя этого участка
    public void ChangeLightness(Rectangle rect)
    {
        int newRed, newGreen, newBlue;
        Color pixel;
 
        // Копируем изображение, загруженное в PictureBox
 
        System.Drawing.Bitmap picture = new Bitmap(this.pictureBox1.Image);
 
        // Поскольку операция увеличения яркости может занять много времени,
        // необходимо предупредить об этом пользователя, если выбран большой участок
 
        if ((rect.Width > 150) || (rect.Height > 150))
        {
 
            DialogResult result = MessageBox.Show(
                "Выделенная область велика! " +
            " Изменение яркости может потребовать значительного времени!",
            "Warning", MessageBoxButtons.OKCancel);
 
            // При нажатии кнопки Cancel (Отмена) выходим из метода
            // и возвращаемся к месту его вызова
            if (result == DialogResult.Cancel) return;
        }
 
        /* Перебираем последовательно все пиксели данного участка
        и удваиваем значение яркости компонент RGB пикселей */
 
        // Перебор по горизонтали слева направо ...
 
        for (int x = rect.X; x < rect.X + rect.Width; x++)
        {
            // и по вертикали сверху вниз ...
 
            for (int y = rect.Y; y < (rect.Y + rect.Height); y++)
            {
                // Считываем текущий пиксель
 
                pixel = picture.GetPixel(x, y);
 
                // Увеличиваем яркость цветовых компонент пикселя
 
                newRed = (int)Math.Round(pixel.R * 2.0, 0);
                if (newRed > 255) newRed = 255;
                newGreen = (int)Math.Round(pixel.G * 2.0, 0);
                if (newGreen > 255) newGreen = 255;
                newBlue = (int)Math.Round(pixel.B * 2.0, 0);
                if (newBlue > 255) newBlue = 255;
 
                // Присваиваем пикселю новые цветовые значения
 
                picture.SetPixel
                (x, y, Color.FromArgb(
                (byte)newRed, (byte)newGreen, (byte)newBlue));
            }
        }
 
        // Помещаем измененную копию изображения в PictureBox
        // чтобы изменения отобразились на экране
 
        this.pictureBox1.Image = picture;
 
    }
 
    static void Main()
    {
        // Создаем экземпляр класса формы
 
        Application.Run(new FunWithTheMouse());
    }
}
0
54 / 54 / 10
Регистрация: 28.06.2012
Сообщений: 224
01.07.2012, 20:50 4
Цитата Сообщение от n971030 Посмотреть сообщение
или желательно нарисовать изобаржение быстро в буфере а затем его вывести на экран
юзай Bitmap - картинка хороша тем, что на ней можно рисовать
то есть создаёшь один пустой битмап, затем в обработчике таймера на нём всё рисуешь, а потом его выводишь
результат - никакого моргания
0
01.07.2012, 20:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2012, 20:50
Помогаю со студенческими работами здесь

Возможно ли рисовать анимацию в форме
Возможно ли рисовать анимацию в форме? Обязательно ли нужен net framework для написания программ...

Рисовать на форме без события Paint
Здравствуйте! Как можно рисовать на форме без использования события Paint. Ну типа самому написать...

Создать класс который будет рисовать ячейку на форме
Когда я пытаюсь сделать это, у меня выдается ошибка &quot;...

Есть класс Точка. Написать метод, который будет рисовать точку на форме
Есть класс Точка. Написать метод, который будет рисовать точку на форме. class Point { ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru