Witam serdecznie, mam problem nad którym siedzę od paru dni.
Mianowicie mam taki kawałek kodu:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
mouseMoveLocation = e.Location;
if (rysowanie)
{
mouseX = e.X;
mouseY = e.Y;
}
if (e.Button == MouseButtons.Left)
{
pisak = new Pen(paletaKolorow.dajColorG(), szerokosc);
switch (paletaNarzedzi.dajNarzedzie())
{
case "Olowek":
{
mousePath.AddLine(mouseX, mouseY, mouseX, mouseY);
try
{
grafika.DrawPath(pisak, mousePath);
}
catch { }
pictureBox1.Refresh();
break;
}
case "Prostokat":
{
grafika.DrawRectangle(pisak, mouseDownLocation.X, mouseDownLocation.Y,
mouseX - mouseDownLocation.X, mouseY - mouseDownLocation.Y);
pictureBox1.Refresh();
break;
}
case "Elipsa":
{
grafika.DrawEllipse(pisak, mouseDownLocation.X, mouseDownLocation.Y,
mouseX - mouseDownLocation.X, mouseY - mouseDownLocation.Y);
pictureBox1.Refresh();
break;
}
default: break;
}
}
problem polega na tym, że jeśli rysuję ołówkiem to wszystko jest ok, natomiast jeśli chcę narysować prostokąt bądź elipsę pojawia się problem, który pokazany jest na obrazku
http://img519.imageshack.us/my.php?image=rysin9.jpg
Moje przemyślenia co do tego.
Napisałem ten program wcześniej bez obsługi zapisu obrazka do pliku i problem nie występował, gdyż rysowałem bezpośrednio na obiekcie PictureBox.
Niestety, program musi posiadać zapis do pliku, więc w takim przypadku należy rysować na Bitmapie, a nie bezpośrednio na komponencie.
Po prostu chodzi mi o kawałek kodu, który nie odrysowywałby bitmapy od razu po ruszeniu myszką tylko kiedy nacisnę klawisz myszki i w miejscu w którym go puszczam.
Jeśli napiszę funkcję która rysuje w zdarzeniu OnMouseUp to prostokąt będzie narysowany poprawnie, z tym że nie będzie widoczny sam proces rysowania.
Zastanawiam się czy w ogóle da się to wykonać...