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);
            }
 
        }
 
    }
}
 
kresleni3.txt · Last modified: 2014/10/13 14:58 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki