Pomoc w tworzeniu painta

0

witam. Wiec tak pisze program na wzor MS painta .Juz mam prawie wszystkie narzedzia zrobione tylko mam problem z 1. Otoz chodzi mi taki figor jak prostokat i kolo. Nie bardzo wiem w jaki sposob mozna pictureBox1.Images przypisac do jakiejsc zmiennej tymczasowej?

mam cos takiego

private void panel1_MouseDown(object sender, MouseEventArgs e) 
        { 
       if (e.Button == MouseButtons.Left) 
                { 
                    p = e.Location; 
                obraz1 = pictureBox1.Images; //  i tu powinienem sobie zapisywac do zmiennej tymczasowej obecny obraz z pictureBoxa, jednak to nie dziala bo wyskakuje blad ze obraz nie moze byc pusty.


        } 
}

nastepnie

 
private void panel1_MouseUp(object sender, MouseEventArgs e) 
        { 
  if (e.Button == MouseButtons.Left) 
                { 
  g = Graphics.FromImage(obraz1); // tu wczytuje obraz ze zmiennej tymczasowej. 
    g.DrawRectangle(pioro, p.X, p.Y, e.X - p.X, e.Y - p.Y); 
} 
}

Potrzebuje pomocy w jaki sposob zastapic

obraz1 = pictureBox1.Images; 

Poniewaz to nie dziala. Moze jakos ze strumieniem? Ma ktos jakies propozycje??

0

Może przeda się metoda Clone()?

0

a co mi to da? mowisz o pictureBox1.Clone() ?

0

Sprobuj tak:

public Form1()
        {
            InitializeComponent();

            pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
        }

Image obraz; //przechowuje obraz z pictureBox1

        //pozycja startowa lini
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            startX = e.X;
            startY = e.Y;
        }

        //rysuj linie
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            obraz = pictureBox1.Image;

            Graphics g = Graphics.FromImage(obraz);

            g.DrawLine(new Pen(Color.Red), startX, startY, e.X, e.Y);
            g.Dispose();

            pictureBox1.Image = obraz; //wyswietl zmiany
        }

        //kopiuj do innego pictureboxa
        private void button1_Click(object sender, EventArgs e)
        {
            pictureBox2.Image = obraz;
        }
0

ale ja nie chce przenosic zawartosci z 1 pictureBoxa do 2. Chece tylko w jakis sposob skopiowac jego zawarotsc do zmiennej tymaczasowej ktora pozniej wczytam przed narysowaniem figury w mause_move.

Wpadlem na pomysl zeby zrobic to na streamach. Moze ktor powie jak to powinn owygladac?

mysle nad takim czyms

to bym daj w mause_down

PictureBox1.Image.Save(nazwa.bmp); // tu bym to zapisywal do obrazka tymczasowego

i pozniej w mause_move

FileStream fs = new FileStream("nazwa.bmp", FileMode.Open);
obraz1 = Image.FromStream(fs);
 g = Graphics.FromImage(obraz1);
g.DrawRectangle(pioro, p.X, p.Y, e.X - p.X, e.Y - p.Y);

Tylko nie wiem czy w dobrych miejscach ...

Ma to dzialac na zasadzie takiej ze podczas zdarznie mause_down program zapisuje zawarsoc obecna pictureBoxa i pizniej przez narysowanie figury w tym przypadku prostokata w mause_move ja wczytuje

0

ale ja nie chce przenosic zawartosci z 1 pictureBoxa do 2. Chece tylko w jakis sposob skopiowac jego zawarotsc do zmiennej tymaczasowej
A nie pomyślałeś, że tą zmienną tymczasową jest właśnie drugi picture box ? :>

0
morphi napisał(a)

ale ja nie chce przenosic zawartosci z 1 pictureBoxa do 2. Chece tylko w jakis sposob skopiowac jego zawarotsc do zmiennej tymaczasowej ktora pozniej wczytam przed narysowaniem figury w mause_move.

Jak jest mozliwe przeniesienie obrazu z jednego pictureboxa do drugiego, to czemu mialo by nie byc mozliwe skopiowanie obrazu do tego samego pictureboxa? Rozwiazanie jest w moim poscie. Wystarczy, ze dostosujesz to do swoich potrzeb.

Tylko widze, ze czekasz tu na gotowca. Niestety nie bede cie tu za raczke prowadzic. Dalem, ci kod, teraz go zmien. Jak nie umiesz to programowanie nie jest dla ciebie.

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