Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace MyGraphicEditor
- {
- public partial class Form1 : Form
- {
- Bitmap map;
- Pen[] pen;
- Pen pen1;
- // Pen pen = new Pen(Color.Black,3f);
- Graphics graphics;
- bool pen_mode;
- int cnt = 0;
- Point[][] p;
- bool mdown;
- String mode;
- bool point_focused;
- int catch_line_lindex;
- int catch_point_lindex;
- private class ArrayPoints
- {
- private int index = 0;
- private Point[] points;
- public ArrayPoints(int size)
- {
- if (size <= 0) size = 2;
- points = new Point[size];
- }
- public void setPoint(int x,int y)
- {
- if (index >= points.Length) index = 0;
- points[index] = new Point(x, y);
- index++;
- }
- public void resetPoints()
- {
- index = 0;
- }
- public int getCountPoints()
- {
- return index;
- }
- public Point[] GetPoints()
- {
- return points;
- }
- }
- private ArrayPoints arrayPoints;
- public Form1()
- {
- arrayPoints = new ArrayPoints(2);
- pen1 = new Pen(Color.Black, 3f);
- pen_mode = false;
- map = new Bitmap(100, 100);
- mode = "Рисуем линию";
- catch_line_lindex = -1;
- catch_point_lindex = -1;
- point_focused = false;
- mdown = false;
- InitializeComponent();
- setSize();
- p = new Point[100][];
- pen = new Pen[100];
- for (int i = 0; i < 100; i++)
- {
- p[i] = new Point[2];
- pen[i] = new Pen(Color.Black, 3f);
- }
- }
- private void setSize()
- {
- Rectangle rectangle = Screen.PrimaryScreen.Bounds;
- map = new Bitmap(rectangle.Width, rectangle.Height);
- graphics = Graphics.FromImage(map);
- for(int i = 0; i < cnt; i++)
- {
- pen[i].StartCap = System.Drawing.Drawing2D.LineCap.Round;
- pen[i].EndCap = System.Drawing.Drawing2D.LineCap.Round;
- }
- }
- private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
- {
- mdown = false;
- if (pen_mode)
- {
- arrayPoints.resetPoints();
- }
- else {
- if (mode == "Рисуем линию")
- {
- p[cnt][1].X = e.X;
- p[cnt][1].Y = e.Y;
- cnt++;
- }
- if (mode == "Изменяем линию")
- {
- p[catch_line_lindex][catch_point_lindex].X = e.X;
- p[catch_line_lindex][catch_point_lindex].Y = e.Y;
- }
- pictureBox1.Invalidate();
- mode = "Рисуем линию";
- }
- }
- private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
- {
- mdown = true;
- if (!pen_mode) {
- if (mode == "Рисуем линию")
- {
- p[cnt][0].X = e.X;
- p[cnt][0].Y = e.Y;
- }
- if (mode == "Изменяем линию")
- {
- p[catch_line_lindex][catch_point_lindex].X = e.X;
- p[catch_line_lindex][catch_point_lindex].Y = e.Y;
- }
- }
- }
- private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
- {
- if (pen_mode)
- {
- if (!mdown) return;
- arrayPoints.setPoint(e.X, e.Y);
- if (arrayPoints.getCountPoints() >= 2)
- {
- graphics.DrawLines(pen1,arrayPoints.GetPoints());
- pictureBox1.Image = map;
- arrayPoints.setPoint(e.X, e.Y);
- }
- }
- else
- {
- if (mdown)
- {
- if (mode == "Рисуем линию")
- {
- p[cnt][1].X = e.X;
- p[cnt][1].Y = e.Y;
- }
- if (mode == "Изменяем линию")
- {
- p[catch_line_lindex][catch_point_lindex].X = e.X;
- p[catch_line_lindex][catch_point_lindex].Y = e.Y;
- }
- }
- else
- {
- mode = "Рисуем линию";
- point_focused = false;
- catch_point_lindex = -1;
- catch_line_lindex = -1;
- for (int i = 0; i < cnt; i++)
- {
- if (Math.Abs(p[i][0].X - e.X) < 5 && Math.Abs(p[i][0].Y - e.Y) < 5)
- {
- point_focused = true;
- catch_point_lindex = 0;
- catch_line_lindex = i;
- mode = "Изменяем линию";
- }
- if (Math.Abs(p[i][1].X - e.X) < 5 && Math.Abs(p[i][1].Y - e.Y) < 5)
- {
- point_focused = true;
- catch_point_lindex = 1;
- catch_line_lindex = i;
- mode = "Изменяем линию";
- }
- }
- }
- }
- pictureBox1.Invalidate();
- }
- private void pictureBox1_Paint(object sender,PaintEventArgs e)
- {
- graphics = e.Graphics;
- if (!pen_mode)
- {
- if (point_focused)
- {
- graphics.DrawRectangle(new Pen(Color.Red), p[catch_line_lindex][catch_point_lindex].X - 5, p[catch_line_lindex][catch_point_lindex].Y - 5, 10, 10);
- }
- for (int i = 0; i < cnt; i++)
- {
- graphics.DrawLine(pen[i], p[i][0].X, p[i][0].Y, p[i][1].X, p[i][1].Y);
- }
- if (mdown)
- {
- graphics.DrawLine(pen[cnt], p[cnt][0].X, p[cnt][0].Y, p[cnt][1].X, p[cnt][1].Y);
- }
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- pictureBox1.Dispose();
- }
- private void trackBar1_ValueChanged(object sender, EventArgs e)
- {
- for (int i = cnt; i < 100; i++)
- pen[i].Width = trackBar1.Value;
- }
- private void button3_Click(object sender, EventArgs e)
- {
- for(int i=cnt;i<100;i++)
- pen[i].Color = ((Button)sender).BackColor;
- }
- private void button5_Click(object sender, EventArgs e)
- {
- pen[cnt].Color = ((Button)sender).BackColor;
- }
- private void button4_Click(object sender, EventArgs e)
- {
- if (colorDialog1.ShowDialog() == DialogResult.OK)
- {
- pen[cnt].Color = colorDialog1.Color;
- ((Button)sender).BackColor = colorDialog1.Color;
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- if (pictureBox1.Image != null) //если в pictureBox есть изображение
- {
- //создание диалогового окна "Сохранить как..", для сохранения изображения
- saveFileDialog1 = new SaveFileDialog();
- saveFileDialog1.Title = "Сохранить картинку как...";
- //отображать ли предупреждение, если пользователь указывает имя уже существующего файла
- saveFileDialog1.OverwritePrompt = true;
- //отображать ли предупреждение, если пользователь указывает несуществующий путь
- saveFileDialog1.CheckPathExists = true;
- //список форматов файла, отображаемый в поле "Тип файла"
- saveFileDialog1.Filter = "Image Files(*.BMP)|*.BMP|Image Files(*.JPG)|*.JPG|Image Files(*.GIF)|*.GIF|Image Files(*.PNG)|*.PNG|All files (*.*)|*.*";
- //отображается ли кнопка "Справка" в диалоговом окне
- saveFileDialog1.ShowHelp = true;
- if (saveFileDialog1.ShowDialog() == DialogResult.OK) //если в диалоговом окне нажата кнопка "ОК"
- {
- pictureBox1.Image.Save(saveFileDialog1.FileName);
- }
- }
- }
- private void button13_Click(object sender, EventArgs e)
- {
- Bitmap image; //Bitmap для открываемого изображения
- OpenFileDialog open_dialog = new OpenFileDialog(); //создание диалогового окна для выбора файла
- open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*"; //формат загружаемого файла
- if (open_dialog.ShowDialog() == DialogResult.OK) //если в окне была нажата кнопка "ОК"
- {
- try
- {
- image = new Bitmap(open_dialog.FileName);
- //вместо pictureBox1 укажите pictureBox, в который нужно загрузить изображение
- this.pictureBox1.Size = image.Size;
- pictureBox1.Image = image;
- pictureBox1.Invalidate();
- }
- catch
- {
- DialogResult rezult = MessageBox.Show("Невозможно открыть выбранный файл",
- "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
- }
- private void button14_Click(object sender, EventArgs e)
- { if (!pen_mode)
- pen_mode = true;
- else pen_mode = false;
- }
- }
- }
- Пытаюсь сделать графический векторный редактор. Но возникло несколько проблем. в button2(кнопка очищения рисунка) возникает ошибка - неправильный аргумент. Не знаю как очистить рисунок, все перепробовал - не работает. Button1(кнопка сохранения) тоже не работает. Также я сделал два режима рисования. Первый это рисование прямыми,их еще можно перетаскивать. Второе это произвольное рисование(рисует,когда зажата мышка). Вот произвольное почему-то не работает. Там тоже ошибка возникает в строке graphics.DrawLines(pen1,arrayPoints.GetPoints()); Хотя я тут массив точек и карандаш подал на вход,все правильно.
Advertisement
Add Comment
Please, Sign In to add comment