Думаю всем известен стандартная программа Windows - Paint, который дает возможность сделать разные действие над картинками. Также с помощью этой программы можно рисовать картинки выбрав карандаш с некоторой толщиной и цвета. Тут, и в несколько других статьях будем создать маленький инструмент с помощью C#-а, который будет иметь функционал, схожий Paint.
1. Создаем новый проект File -> New Project
2. Выберем Visual C# - Windows Forms Application, назовем проект Paint (или так как хотите) и нажимаем OK.
3. Появится Form, добавим два Button, один Panel и ColorDialog. Окно должен иметь такой вид
В этой статье буду представлять функционал рисования с самым тонким карандашом.
Давайте описать те шаги, с помощью которого пользователь будет рисовать в поверхности.
1. Клик левой кнопкой мыши
2. Мышь движется с некоторой траекторией, это траектория и будет рисунок пользователя
3. Пользователь выпускает кнопка мыши
Открываем программу Form и начинаем написать программу.
В программу дается возможность выбрать цвет карандаша, но по умолчанию оно будет черным. Для этого обявым переменную типа Color
Color CurrentColor = Color.Black;
В каждый момент времени факт нажатия кнопки будет проверен с помощью переменную типа bool - isPressed
bool isPressed = false;
В программу дается возможность выбрать цвет карандаша, но по умолчанию оно будет черным. Для этого обявым переменную типа Color
Color CurrentColor = Color.Black;
В каждый момент времени факт нажатия кнопки будет проверен с помощью переменную типа bool - isPressed
bool isPressed = false;
Когда после клика мыши перетаскиваем его над Panel, в каждой позиции мыши можем иметь прежний и текущий позиции, для этого обьявляем следующие переменные
Point CurrentPoint;
Point PrevPoint;
И наконец для рисование будем обьявить переменную g
Graphics g;
Создаем событие для кнопки выбора цвета, и добавляем в нем такой код
private void button1_Click(object sender, EventArgs e)
{
DialogResult D = colorDialog1.ShowDialog();
if (D == System.Windows.Forms.DialogResult.OK)
CurrentColor = colorDialog1.Color;
}
Для очистки уже рисованного добавим следующую событию
private void button2_Click_1(object sender, EventArgs e)
{
panel1.Refresh();
}
Для следования нажатия, выпуска и перетаскивания мыши будем создать событии MouseDown, MouseUp, MouseMove
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
isPressed = true;
CurrentPoint = e.Location;
}
Во время перетаскивание мыши должен быть проверен условия нажат левая кнопка мыши или нет. Если да, то мы должны взят предыдущие и текущие позиции мыши и с помощью этих позиций рисовать линию.
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (isPressed)
{
PrevPoint = CurrentPoint;
CurrentPoint = e.Location;
paint_simple();
}
}
функция paint_simple() имеет такой вид
private void paint_simple()
{
Pen p = new Pen(CurrentColor);
g.DrawLine(p, PrevPoint, CurrentPoint);
}
Кажется все
Вот пример использование программы и код
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Paint
{
public partial class Form1 : Form
{
Color CurrentColor = Color.Black; //Default color
Point CurrentPoint; //Current Position
Point PrevPoint; //Previous Position
bool isPressed;
Graphics g;
public Form1()
{
InitializeComponent();
g = panel1.CreateGraphics();
}
private void button1_Click(object sender, EventArgs e)
{
DialogResult D = colorDialog1.ShowDialog();
if (D == System.Windows.Forms.DialogResult.OK)
CurrentColor = colorDialog1.Color;
}
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
isPressed = true;
CurrentPoint = e.Location;
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (isPressed)
{
PrevPoint = CurrentPoint;
CurrentPoint = e.Location;
paint_simple();
}
}
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
isPressed = false;
}
private void paint_simple()
{
Pen p = new Pen(CurrentColor);
g.DrawLine(p, PrevPoint, CurrentPoint);
}
private void button2_Click_1(object sender, EventArgs e)
{
panel1.Refresh();
}
}
}
Комментариев нет:
Отправить комментарий