przerysowanie obiektow po odswierzeniu formy

0

witam :) napisalem takie cos:

        private int RysowanieAktywne = 0;

        
        private void Panel1_MouseDown(object sender, MouseEventArgs e)
        {
            Graphics g = this.panel1.CreateGraphics();
            g.DrawEllipse(Pens.Aquamarine, e.X, e.Y, 5, 5);
            RysowanieAktywne = 1;

        }

        private void Panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (RysowanieAktywne == 1)
            {
                Graphics g = this.panel1.CreateGraphics();
                g.DrawEllipse(Pens.Aquamarine, e.X, e.Y, 5, 5);
            }

        }
        private void Panel1_MouseUp(object sender, MouseEventArgs e)
        {
            RysowanieAktywne = 0;

        }

jak widac po kodzie jak naciskamy przycisk myszy to do momentu az go nie poscimy beda rysowane koleczka. moje pytania sa takie:

  1. czy mozna to jakos sprytniej rozwiazac?? sa na to jakies fajne funkcje?? :)
  2. jezeli chcialbym zeby po odswierzeniu formatki to co ktos narysuje bylo odtworzone, to musze ablicowac kazdy ruch myszy czy mozna w jakis sposob odzykac narysowane obiekty?? :)

pozdrawiam

0
Chmielu napisał(a)
  1. jezeli chcialbym zeby po odswierzeniu formatki to co ktos narysuje bylo odtworzone, to musze ablicowac kazdy ruch myszy czy mozna w jakis sposob odzykac narysowane obiekty?? :)

Rysuj po Bitmapie, a Bitmape wyświetlaj w PictureBox.

0

bitmapa ma tylko opcje setPixel... marzylo mi sie zeby skorzystac a dobrodziejstw jakie ma zaimpletowane graphics ( czyli gotowe funkcje rysowania prostokontow itd ). i powstaly nowe pytania:

  1. czy jest mozliwosc skonvertowania rysunku ktory powstanie na pictureboxie przy pomocy metod klasy graphics do bitmapy?? myslalem ze funkcja
    pictureBox1.DrawToBitmap(bmp, r);
    mi w tym pomoze ale niestety tak nie jest. kod:
        public Form1()
        {
            InitializeComponent();
            bmp=new Bitmap(pictureBox1.Width,pictureBox1.Height);
            g = this.pictureBox1.CreateGraphics();
            kolor = Color.Aquamarine;
            r = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height);
            p = new Pen(kolor);
        }

        private int RysowanieAktywne = 0;
        private Graphics g;
        private Bitmap bmp;
        private Color kolor;
        private Rectangle r;
        private Pen p;


        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            RysowanieAktywne = 1;

        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {

            if (RysowanieAktywne == 1)
            {
                g.DrawEllipse(p, e.X, e.Y, 2, 2);
            }


        }
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            RysowanieAktywne = 0;
            pictureBox1.DrawToBitmap(bmp, r);
        }

ale po wywolaniu funkcji g.DrawImage(bmp, 0, 0); to co nabazgrolilem wczesniej nie jest przerysowane :(

  1. czy istnieje mozliwosc stawiania figur z klasy graphics bezposrednio na bitmapie?? w necie znalazle "zloty srodek" w postaci
    Bitmap bmp=new Bitmap(pictureBox1.Width,pictureBox1.Height);
    Graphics g = Graphics.FromImage(bmp)
    ale wtedy w czasie rysowania na bieŻąco nie pokazuje sie to co zostanie narysowane :) wg czyjejs teori dzieki czemus takiemu to co robie na pictureboxie powinno byc rownoczesnie na bmp i na g... a jak odswierzam ( g.DrawImage(bmp, 0, 0); ) to znowu jest pusto.... oczywiscie rysuje metodami z klasy graphics ;)

pozdrawiam :)

0

RYSUJ NA BITMAPIE! - teraz wystarczy?

I nie mów, że się nie da.

Bitmap bmp = new Bitmap(300, 200);
using (Graphics g = Graphics.FromImage(bmp))
{
    g.DrawRectangle(Pens.Red, 10, 10, 100, 50);
}
this.pictureBox1.Image = bmp;

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