using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace kresleni { public partial class MainWindow : Form { public MainWindow() { InitializeComponent(); comboBox1.SelectedIndex = 0; pictureBox_SizeChanged(null, null); } private void runMenuItem_Click(object sender, EventArgs e) { MainWindow w = new MainWindow(); w.Visible = true; Graphics g = Graphics.FromImage (pictureBox.Image); g.DrawLine (new Pen (Color.Red), 10, 10, 100, 100); pictureBox.Invalidate (); } private void quitMenuItem_Click(object sender, EventArgs e) { Close (); } int X0, Y0; bool click; Image save; private void pictureBox_MouseDown(object sender, MouseEventArgs e) { X0 = e.X; Y0 = e.Y; click = true; save = new Bitmap (pictureBox.Image); } const int line = 0; const int rectangle = 1; const int ellipse = 2; private void pictureBox_MouseMove(object sender, MouseEventArgs e) { if (click) { Graphics g = Graphics.FromImage(pictureBox.Image); g.DrawImage (save, 0, 0); int tool = comboBox1.SelectedIndex; switch (tool) { case line: g.DrawLine (pen, X0, Y0, e.X, e.Y); break; case rectangle: int X1 = X0; int Y1 = Y0; int X2 = e.X; int Y2 = e.Y; if (X1 > X2) { int t = X2; X2 = X1; X1 = t; } if (Y1 > Y2) { int t = Y2; Y2 = Y1; Y1 = t; } g.FillRectangle (brush, X1, Y1, X2-X1, Y2-Y1); g.DrawRectangle (pen, X1, Y1, X2-X1, Y2-Y1); break; case ellipse: g.FillEllipse (brush, X0, Y0, e.X-X0, e.Y-Y0); g.DrawEllipse (pen, X0, Y0, e.X-X0, e.Y-Y0); break; } pictureBox.Invalidate(); } } private void pictureBox_MouseUp(object sender, MouseEventArgs e) { click = false; } private void pictureBox_SizeChanged(object sender, EventArgs e) { Image old = pictureBox.Image; int W = pictureBox.Width; int H = pictureBox.Height; if (old != null) { if (W < old.Width) W = old.Width; if (H < old.Height) H = old.Height; } Image nxt = new Bitmap (W, H); Graphics g = Graphics.FromImage (nxt); g.FillRectangle (new SolidBrush(Color.White), 0, 0, W, H); if (old != null) g.DrawImage (old, 0, 0); pictureBox.Image = nxt; } int cnt = 1; private void newColorMenuItem_Click(object sender, EventArgs e) { Panel p = new Panel(); toolbar.Controls.Add(p); p.BackColor = Color.Blue; cnt ++; p.Left = panel1.Left + (cnt - 1) * (panel1.Width + panel1.Left); p.Top = panel1.Top; p.Width = panel1.Width; p.Height = panel1.Height; p.MouseDown += panel1_MouseDown; } Pen pen = new Pen (Color.Green); Brush brush = new SolidBrush (Color.Orange); private void panel1_MouseDown(object sender, MouseEventArgs e) { Panel p = (Panel) sender; if (e.Button == MouseButtons.Left) pen = new Pen(p.BackColor); else if (e.Button == MouseButtons.Right) // brush = new SolidBrush (p.BackColor); // using System.Drawing.Drawing2D; brush = new LinearGradientBrush (new Point (0, 0), new Point ((int) numericUpDown1.Value, (int) numericUpDown2.Value), pen.Color, p.BackColor); else if (e.Button == MouseButtons.Middle) { colorDialog1.Color = p.BackColor; if (colorDialog1.ShowDialog() == DialogResult.OK) { p.BackColor = colorDialog1.Color; pen = new Pen(p.BackColor); } } } private void openMenuItem_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { pictureBox.Image = new Bitmap (openFileDialog1.FileName); pictureBox_SizeChanged (null, null); } } private void saveMenuItem_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { pictureBox.Image.Save (saveFileDialog1.FileName); } } } }