IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tomáš Smrčina:22.3.2023 20:21

[vykreslení mnohoůhelníku do pictureboxu pomocí myši a vytvoření volného nástoje pro kreslení

Zkusil jsem: zkoušel jsem pouze vytvoření mnohoúhelníků, konkrétně jsem zkoušel ukládat body vytvořené myší do proměných a potom je vyvolat v mětodě drawpolygon.

Chci docílit: vytvoření kódu pro vykreslení mnohoúhelníku a pro nástroj voleného malovaní

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;

namespace GrafickýEditor
{
    public partial class HlavníOkno : Form
    {


        public HlavníOkno()
        {
            InitializeComponent();
        }
        string nástroj;
        Bitmap bmpH, bmpD;
        Pen peroH, peroD;
        SolidBrush štětecD;
        Graphics malířH, malířD;
        int dx, dy;


        private void Plátno_MouseDown(object sender, MouseEventArgs e)
        {
            (dx, dy) = (e.X, e.Y);

        }

        private void Plátno_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button==MouseButtons.Left)
            {
                malířH.Clear(Color.Transparent);
                switch (nástroj)
                {
                    case "rbČára":
                        malířH.DrawLine(peroH, dx, dy, e.X, e.Y);
                        break;
                    case "rbElipsa":
                        malířH.DrawEllipse(peroH, dx, dy, e.X - dx, e.Y - dy);
                        break;
                    case "rbObdélník":
                        malířH.DrawRectangle(peroH, Math.Min(e.X, dx), Math.Min(e.Y, dy), Math.Max(e.X, dx) - Math.Min(e.X, dx), Math.Max(e.Y, dy) - Math.Min(e.Y, dy));
                        break;
                    case "rbMnohoúhelník":

                        break;


                }
                Plátno.Refresh();
            }


        }
        private void Plátno_MouseUp(object sender, MouseEventArgs e)
        {
            malířH.Clear(Color.Transparent);
            if (e.Button == MouseButtons.Left)
            {
                switch (nástroj)
                {
                    case "rbČára":
                        malířD.DrawLine(peroD, dx, dy, e.X, e.Y);
                        break;
                    case "rbElipsa":
                        malířD.FillEllipse(štětecD, dx, dy, e.X - dx, e.Y - dy);
                        malířD.DrawEllipse(peroD, dx, dy, e.X - dx, e.Y - dy);
                        break;
                    case "rbObdélník":
                        malířD.FillRectangle(štětecD, Math.Min(e.X, dx), Math.Min(e.Y, dy), Math.Max(e.X, dx) - Math.Min(e.X, dx), Math.Max(e.Y, dy) - Math.Min(e.Y, dy));
                        malířD.DrawRectangle(peroD, Math.Min(e.X, dx), Math.Min(e.Y, dy), Math.Max(e.X, dx) - Math.Min(e.X, dx), Math.Max(e.Y, dy) - Math.Min(e.Y, dy));
                        break;
                    case "rbMnohoúhelník":
                        break;

                }
                Plátno.Refresh();
            }
        }
        private void nudTloušťkaPera_ValueChanged(object sender, EventArgs e)
        {
            peroD.Width = (float)nudTloušťkaPera.Value;
        }

        private void načístToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

                openFileDialog.Filter = "Image files (*.jpg, *.jpeg, *.png, *.bmp) | *.jpg; *.jpeg; *.png; *.bmp";

                if(openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    Plátno.Image=Image.FromFile(openFileDialog.FileName);
                }

        }

        private void uloženíToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Plátno.BackgroundImage != null)
            {
                using (SaveFileDialog saveFileDialog = new SaveFileDialog())
                {
                    saveFileDialog.Filter = "PNG Image|*.png";
                    saveFileDialog.Title = "Ulož obrázek";
                    saveFileDialog.ShowDialog();

                    if (saveFileDialog.FileName != "")
                    {
                        System.IO.FileStream fs =
                           (System.IO.FileStream)saveFileDialog.OpenFile();
                        switch (saveFileDialog.FilterIndex)
                        {
                            case 1:
                                bmpD.Save(fs,
                                  System.Drawing.Imaging.ImageFormat.Jpeg);

                                break;

                            case 2:
                                bmpD.Save(fs,
                                  System.Drawing.Imaging.ImageFormat.Png);
                                break;

                            case 3:
                               bmpD.Save(fs,
                                  System.Drawing.Imaging.ImageFormat.Bmp);
                                break;
                        }

                        fs.Close();
                    }
                }
            }
        }

        private void novýToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Chcete obsah uložit?","Uložení",MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes)
            {
                if (Plátno.BackgroundImage != null)
                {
                    using (SaveFileDialog saveFileDialog = new SaveFileDialog())
                    {
                        saveFileDialog.Filter = "JPEG Image|*.jpg|PNG Image|*.png|BMP Image|*.bmp";
                        saveFileDialog.Title = "Ulož obrázek";
                        saveFileDialog.ShowDialog();

                        if (saveFileDialog.FileName != "")
                        {
                            System.IO.FileStream fs =
                               (System.IO.FileStream)saveFileDialog.OpenFile();
                            switch (saveFileDialog.FilterIndex)
                            {
                                case 1:
                                    bmpD.Save(fs,
                                      System.Drawing.Imaging.ImageFormat.Jpeg);
                                    break;

                                case 2:
                                    bmpD.Save(fs,
                                      System.Drawing.Imaging.ImageFormat.Png);
                                    break;

                                case 3:
                                    bmpD.Save(fs,
                                       System.Drawing.Imaging.ImageFormat.Bmp);
                                    break;

                            }
                        }
                    }
                }
            }
            else if (result == DialogResult.No)
            {
                Plátno.Image = null;
                Plátno.BackgroundImage = null;
            }


        }

        private void rbMnohouhelnik_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void HlavníOkno_Load(object sender, EventArgs e)
        {
            bmpH = new Bitmap(Plátno.Width, Plátno.Height);
            bmpD = new Bitmap(Plátno.Width, Plátno.Height);
            Plátno.Image = bmpH;
            Plátno.BackgroundImage = bmpD;
            peroH = new Pen(Color.Gray,1);
            peroH.DashPattern = new float[] { 3, 3};
            peroD = new Pen(Color.Black, 1);
            štětecD = new SolidBrush(Color.White);
            malířH = Graphics.FromImage(bmpH);
            malířH.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            malířD = Graphics.FromImage(bmpD);
            malířD.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            nástroj = rbČára.Name;

        }
        private void btnBarva_MouseUp(object sender, MouseEventArgs e)
        {
            ColorDialog barevnýDialog = new ColorDialog();
            if (barevnýDialog.ShowDialog()==DialogResult.OK)
                switch (e.Button)
                {
                    case MouseButtons.Left:
                        btnBarva.BackColor = barevnýDialog.Color;
                        štětecD.Color = btnBarva.BackColor;
                        break;
                    case MouseButtons.Right:
                        btnBarva.FlatAppearance.BorderColor = barevnýDialog.Color;
                        peroD.Color = barevnýDialog.Color;
                        break;
                }
        }
        private void button1_MouseUp(object sender, MouseEventArgs e)
        {
            switch (e.Button)
            {
                case MouseButtons.Left:
                    btnBarva.BackColor = (sender as Button).BackColor;
                    štětecD.Color = (sender as Button).BackColor;
                    break;
                case MouseButtons.Right:
                    btnBarva.FlatAppearance.BorderColor = (sender as Button).BackColor;
                    peroD.Color= (sender as Button).BackColor;
                    break;
            }
        }
        private void rbNástroj_MouseClick(object sender, MouseEventArgs e)
        {
            nástroj = (sender as RadioButton).Name;
        }
    }
}
Editováno 22.3.2023 20:23
 
Odpovědět
22.3.2023 20:21
Avatar
HONZ4
Člen
Avatar
HONZ4:24.3.2023 22:22

Z dotazu asi nechápu, nač se ptáš...
Prostě zaznamenáš body do pole Point a nakreslíš polygon pomocí DrawPolygon, případně DrawLines.

 
Nahoru Odpovědět
24.3.2023 22:22
Avatar
Jurajs
Člen
Avatar
Odpovídá na Tomáš Smrčina
Jurajs:25.3.2023 10:07

Ahoj, proč máš v kodu diakritiku? Tohle fakt nechápu, za 1. Kod se pise anglicky a za 2 bez diakritiky.
Budiž česky ale s diakritikou to jsem ještě neviděl ;)

Editováno 25.3.2023 10:09
 
Nahoru Odpovědět
25.3.2023 10:07
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:27.3.2023 10:36

Presne, nac se ptas? Co ti nejde, jakou to pise chybu? Nebo, kde vidis problem?
A jinak, samozrejme, do nazvu funkci a promenych se diakritika nepise.
A take je vyhoda, v praxi, kdyz funkce nazves anglicky, ze jejich vyznamu rozumi kazdy. Ale, to pro skolni priklad neni podminka.

 
Nahoru Odpovědět
27.3.2023 10:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.