Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
Модератор
1618 / 1075 / 483
Регистрация: 17.07.2012
Сообщений: 5,303
1

Рисование линии мышкой на PictureBox

11.04.2017, 00:28. Просмотров 5287. Ответов 1
Метки нет (Все метки)


Всем привет. Решил побаловаться, попробовать реализовать некое подобие Paint на C#. Начал с рисования линии. Вроде бы делаю все правильно: когда пользователь нажимает мышку то фиксирую начальную точку и картинку, когда пользователь двигает мышь, то загружаю в PictureBox картинку которая была раньше и рисую линию по точкам. Но есть несколько проблем:
1) В процессе рисования линия постоянно то исчезает то появляется
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApp
{
    public partial class MainForm : Form
    {
        private Point start;
        private bool drawing = false;
        private Image orig;
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            start = new Point(e.X, e.Y);
            orig = pictureBox.Image;
            drawing = true;
        }
 
        private void pictureBox_MouseMove(object sender, MouseEventArgs e)
        {
            if (!drawing) return;
            var finish = new Point(e.X, e.Y);
            pictureBox.Image = orig;
            var pen = new Pen(Color.Black, 1f);
            var g = Graphics.FromHwnd(pictureBox.Handle);
            g.DrawLine(pen, start, finish);
            pictureBox.Refresh();
        }
 
        private void pictureBox_MouseUp(object sender, MouseEventArgs e)
        {
            drawing = false;
        }
    }
}
Что я делаю не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2017, 00:28
Ответы с готовыми решениями:

Перетаскивать мышкой второй PictureBox по первому
Здравствуйте, пишу простенький редактор. Загружаю изображения, сохраняю в битмап, который рисую на...

Рисование в PictureBox
Здравствуйте! Помогите пожалййста найти решение. Мне необходимо на PictureBox нарисовать фигуру по...

Рисование на pictureBox
я рисую карандашом на pictureBox, у меня отображается линия. Но когда сверну приложение а потом...

рисование в PictureBox
привет народ. подскажите как реализовать довольно простую вещь (раньше никогда не занимался...

1
611 / 505 / 316
Регистрация: 20.05.2015
Сообщений: 1,422
11.04.2017, 06:32 2
Это из-за 33 и 37 строки

Добавлено через 41 минуту
Так сработает:
C#
1
2
3
4
        private Point start;
        private bool drawing = false;
        Bitmap bm = new Bitmap(300, 300);
        Bitmap bm2 = new Bitmap(300, 300);
Кликните здесь для просмотра всего текста
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
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            var finish = new Point(e.X, e.Y);
            var g = Graphics.FromImage(bm);
            var pen = new Pen(Color.Black, 1f);
            g.DrawLine(pen, start, finish);
            g.Save();
            drawing = false;
            g.Dispose();
            pictureBox1.Invalidate();
        }
 
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            start = new Point(e.X, e.Y);
            orig = bm;
            drawing = true;
        }
 
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (!drawing) return;
            var finish = new Point(e.X, e.Y);
            bm2 = new Bitmap(bm);
            pictureBox1.Image = bm2;
            var pen = new Pen(Color.Black, 1f);
            var g = Graphics.FromImage(bm2);
            g.DrawLine(pen, start, finish);
            g.Dispose(); 
            pictureBox1.Invalidate();
        }
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2017, 06:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Рисование на PictureBox
Проблемка такая, имеется много PictureBox, нужно рисовать сразу на всех, как это возможно...

Рисование в PictureBox
Доброго времени суток, рисую в PictureBox с помощью Image: при нажатии на кнопку рисуется...

Рисование на PictureBox
При рисование пропадает рисунок, если свернуть или перекрыть другой программой. Как сохранить...

Рисование на форме. Линии не прорисовываются
Здравствуйте, не знаю, была ли такая тема раньше, но я не нашёл, так что пишу. Появилась проблема....


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

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

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