Zuerst bin ich auf der PictureBox1 mit der MausWie kann ich das Bild in PictureBox1 durch ein Bild von einem auf der PictureBox1 Rechteck gezeichneten Bereich ersetzen?
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
rect = new Rectangle(e.X, e.Y, 0, 0);
painting = true;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
rect = new Rectangle(
rect.Left,
rect.Top,
Math.Min(e.X - rect.Left, pictureBox1.ClientRectangle.Width - rect.Left),
Math.Min(e.Y - rect.Top, pictureBox1.ClientRectangle.Height - rect.Top));
}
this.pictureBox1.Invalidate();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (painting == true)
{
using (Pen pen = new Pen(Color.Red, 2))
{
e.Graphics.DrawRectangle(pen, rect);
}
}
}
Die Variable rect ist global Rechteck und Malerei ist global Bool ein Rechteck zeichnen.
Dann habe ich in der PictureBox1 mouseup Ereignis
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
pictureBox1.Image = SaveRectanglePart(pictureBox1.Image, rect);
}
Und die Methode SaveRectanglePart
Bitmap bmptoreturn;
public Bitmap SaveRectanglePart(Image image, RectangleF sourceRect)
{
using (var bmp = new Bitmap((int)sourceRect.Width, (int)sourceRect.Height))
{
using (var graphics = Graphics.FromImage(bmp))
{
graphics.DrawImage(image, 0.0f, 0.0f, sourceRect, GraphicsUnit.Pixel);
}
bmptoreturn = bmp;
}
return bmptoreturn;
}
Was ich will ist tun, wenn ich das Rechteck in der mouseup Ereignis fertig Ziehen des PictureBox1 löschen und ersetzen Sie das Bild dort nur durch das Rechteckbild.
Aber ich bin immer Ausnahme Parameter nicht gültig in der mouseup Ereignis
pictureBox1.Image = SaveBitmapPart(pictureBox1.Image, rect);
Und sollte ich irgendwo die Variable bmptoreturn entsorgen?
KDecker Ich habe den Code ausprobiert jetzt habe ich die Methode SaveRectanglePart entsprechend Ihrer Lösung geändert und verwende jetzt nur noch bmp. Und in dem MouseUp-Ereignis habe ich den Code mit dem Bild tmp = pictureBox1.Image; .... und dem ret hinzugefügt, aber was es tut, ist wie das Bild zu zoomen, das Rechteck. Es ersetzt nicht das Rechteckteil, aber macht Zoom herein. –
@DanielVoit Von was ich von der Frage "sagen kann, um die pictureBox1 zu löschen und das Bild dort nur durch das Rechteckbild zu ersetzen." Genau das wollen Sie tun. – KDecker