Odświeżanie picturebox z załadowaną grafiką z pliku.

Odpowiedz Nowy wątek
2015-02-23 21:17
Paaartyk
0

Witam,
mam problem z picturebox'em. Do pracy używam tła wczytanego z pliku i dalej rysuję już na picturebox. Chciał bym móc "wyczyścić" to co narysowałem, a zostawić tło wczytane z pliku. Kiedy próbuję kopiować wczytaną bitmapę nie ma efektu wyczyszczenia. Próbowałem wczytywać kolejny raz bitmapę z pliku ale kończy się to wrzucaniem do pamięci kolejnego obrazka i zawalanie pamięci. Po niżej kod programu który także zawala pamięć na co nie mogę pozwolić ponieważ odświeżanie musi się odbywać co około 100ms.

Wczytanie grafiki z pliku:


private void button3_Click(object sender, EventArgs e)
        {
            DialogResult status = openFileDialog1.ShowDialog();
            if (status == DialogResult.OK)
            {
                sciezkaPlikuGraficznego = openFileDialog1.FileName;
                bitmapa = new Bitmap(sciezkaPlikuGraficznego, true);
                pictureBox1.Image = bitmapa.Clone() as Image;
                pictureBox1.Refresh();
            }
        }

Rysowanie:

private void button2_Click(object sender, EventArgs e)
        {
            Graphics g;
            Pen p = new Pen(Color.Red);
            g = Graphics.FromImage(pictureBox1.Image);
            g.DrawEllipse(p, 100, 100, 20, 20);
            pictureBox1.Refresh();
        } 

Czyszczenie picturebox'a:

 private void button1_Click(object sender, EventArgs e)
        {
            pictureBox1.Image.Dispose();
            pictureBox1.Image = bitmapa.Clone() as Image;
            pictureBox1.Refresh();
        }
Zakładam, że w temacie chodziło o świeżość, a nie o świerzba. - somekind 2015-02-23 23:14

Pozostało 580 znaków

2015-02-23 21:46
0
pictureBox1.Image = bitmapa.Clone() as Image;

Po co to Clone()?

g = Graphics.FromImage(pictureBox1.Image);

Brakuje g.Dispose();

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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