[C#] Pomoc z MiniPaintem

0

Witam. Mam pewien problem. Na zaliczenie muszę zrobić program MiniPaint, z opcją wczytywania i zapisywania pliku, zmiany koloru pędzla, gumki, czyszczenie ekranu i rysowanie elips, prostokątów i linii. Mam wszystko oprócz 3 ostatnich rzeczy. Nie umiem sobie z tym dać rady. Jak zrobić żeby po kliknięciu na formie odpowiednich przycisków rysował się okrą, prostokąt lub linia?? Może to być tylko rysowanie jednego elementu po jednokrotnym naciśnięciu buttona.

Kod programu:

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 MiniPaint
{

    public partial class frmMiniPaint : Form
    {
        private Graphics g;
        private Point p = Point.Empty;
        private Pen pioro;
        private Pen gumka;
        public int size = 5;

        public frmMiniPaint()
        {
            InitializeComponent();
            imgObrazek.Image = new Bitmap(560, 448);
            g = Graphics.FromImage(imgObrazek.Image);
            pioro = new Pen(Color.Black,size);
            gumka = new Pen(Color.White,size*4);

        }

        private void cmdCzysc_Click(object sender, EventArgs e)
        {
            g.Clear(Color.White);
            imgObrazek.Refresh();
        }

        private void cmdKolor_Click(object sender, EventArgs e)
        {
            ColorDialog dialog = new ColorDialog();
            dialog.Color = lblKolor.BackColor;
            dialog.ShowDialog();
            lblKolor.BackColor = dialog.Color;
            pioro.Color = dialog.Color;
           
        }

        private void zapiszToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "bmp|*.bmp";
            dialog.ShowDialog();
            if (dialog.FileName != "")
                imgObrazek.Image.Save(dialog.FileName);
        }

        private void otwórzToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                Bitmap bmp = new Bitmap(dialog.FileName);
                imgObrazek.Image = bmp;
                g = Graphics.FromImage(imgObrazek.Image);
                
            }
        }

        private void imgObrazek_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                p = e.Location;
            if (e.Button == MouseButtons.Right)
                p = e.Location;
            
        }

        private void imgObrazek_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                g.DrawLine(pioro, p, e.Location);
                p = e.Location;
                imgObrazek.Refresh();
            }
            if (e.Button == MouseButtons.Right)
            {
                g.DrawLine(gumka, p, e.Location);
                p = e.Location;
                imgObrazek.Refresh();
            }
        }
}}

I forma:

http://img294.imageshack.us/my.php?image=eeewn9.jpg

user image

Jeśli ktoś wie jak dorobić te elementy(zaprogramować) byłbym wdzięczny. Z góry dzięki :)

0

Tutaj jest przyklad prostego programu graficznego.

0

Znam tą stronkę, ale nie ma tam rozwiązania mojego problemu, tylko program prostszy niż ten co ja mam do tej pory...

0

W takim razie google Twoim przyjacielem. Rozwiazanie problemu jest w kilku pierwszych linkach.

0

void RysujProstokat(System.Drawing.Graphics warstwa, Point start, Point end, Color kolor)
{
warstwa.FillRectangle(new SolidBrush(kolor), new Rectangle(start, new Size(end.X - start.X, end.Y - start.Y)));
// dla nie wypełnionych : DrawRectangle
}

    void RysujElipse(System.Drawing.Graphics warstwa, Point start, Point end, Color kolor)
    {
        warstwa.FillEllipse(new SolidBrush(kolor), new Rectangle(start, new Size(end.X - start.X, end.Y - start.Y)));
    }

    void RysujLinie(System.Drawing.Graphics warstwa, Point start, Point end, Color kolor)
    {
        warstwa.DrawLine(new Pen(kolor), start, end);
    }
0

Tylko nie umiem tego przypisać do tych bttonów :|

1 użytkowników online, w tym zalogowanych: 0, gości: 1