2009-08-02 17 views
1

Ich möchte ein Bild in C# zuschneiden. Wie in den meisten Fotobearbeitungssoftware möchte ich die Rechteck-Box verwenden, die in der Größe verändert und per Maus neu positioniert werden kann. Außerdem würde ich gerne wissen, wie man die beschnittene Fläche hervorhebt, wie in this photo gezeigt.Ein Bild mit einem Rechteck zuschneiden

+0

Wonach suchen Sie hier? Die tatsächliche Art, ein Teil von einem größeren Bild zu beschneiden? Oder eine Möglichkeit, Ihre Zuschneideauswahl wie in dem von Ihnen verlinkten Bild anzuzeigen? – peSHIr

+0

Ich habe schon eine Idee über das Beschneiden. Ich möchte Ihnen helfen, die Bildausschnittauswahl wie im Bild zu zeigen. und ich bewege auch die Ausschnittauswahl. – qulzam

Antwort

0

Die Außenseite der Auswahlbox scheint ein schwarzes Bild mit einem Alpha von etwa 30% darüber zu haben. Um dies zu tun, nehmen Sie einfach jedes Pixel außerhalb des Inhaltsbereichs und zeichnen ein schwarzes Pixel mit einem 30% Alpha darauf. Dies würde den gewünschten abgeblendeten Effekt ergeben.

Wie können Sie ein Rechteck in C# dynamisch besetzbar sein.

+0

Danke Nick Beradi für Hilfe. Das Problem ist, dass, wenn ich an einem Pixel eins nach dem anderen arbeite, es sehr viel Zeit braucht. Gibt es einen schnellen Weg wie die Farbmatrix? – qulzam

0

Um ein Bild heller oder dunkler zu zeichnen (oder die Farben in irgendeiner Weise zu ändern), verwenden Sie einen ColorMatrix, wie this.

+0

ich kenne die Verwendung von Farbmatrix, aber ich weiß nur die Farbmatrix auf das ganze Bild verwenden. Wie können wir es auf Seiten des Bildes verwenden? – qulzam

+0

Zeichnen Sie es als fünf separate Rechtecke (fünf Aufrufe an .DrawImage). Sie können das Bild in vier Rechtecke aufteilen, die alles überdecken, was außerhalb Ihrer Auswahl liegt, und ein Rechteck, das die Auswahl an sich ist. –

0

Ihr Bildlink ist nicht mehr verfügbar.

Also vorausgesetzt, dass Sie in einem Panel haben Sie Ihre Bildbox mit dem Bild zu beschneiden.

Zuerst Event-Handler erstellen müssen für Mausaktionen der Lage sein, einen rechteckigen Bereich zu ziehen, die Sie zuschneiden möchten:

private void picBox_MouseDown(object sender, MouseEventArgs e) 
    { 
     Cursor = Cursors.Default; 
     if (Makeselection) 
     { 
      try 
      { 
       if (e.Button == System.Windows.Forms.MouseButtons.Left) 
       { 
        Cursor = Cursors.Cross; 
        cropX = e.X; 
        cropY = e.Y; 

        cropPen = new Pen(Color.Crimson, 1); 
        cropPen.DashStyle = DashStyle.Solid; 
       } 
       picBox.Refresh(); 
      } 
      catch (Exception ex) 
      { 
      } 
     } 
    } 

    private void picBox_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (Makeselection) 
     { 
      Cursor = Cursors.Default; 
     } 
    } 

    private void picBox_MouseMove(object sender, MouseEventArgs e) 
    { 
     Cursor = Cursors.Default; 
     if (Makeselection) 
     { 
      picBox.Cursor = Cursors.Cross; 
      try 
      { 
       if (picBox.Image == null) 
        return; 


       if (e.Button == System.Windows.Forms.MouseButtons.Left) 
       { 
        picBox.Refresh(); 
        cropWidth = e.X - cropX; 
        cropHeight = e.Y - cropY; 
        picBox.CreateGraphics().DrawRectangle(cropPen, cropX, cropY, cropWidth, cropHeight); 
       } 
      } 
      catch (Exception ex) 
      { 
      } 
     } 
    } 

    private void picBox_MouseLeave(object sender, EventArgs e) 
    { 
     tabControl.Focus(); 
    } 

    private void picBox_MouseEnter(object sender, EventArgs e) 
    { 
     picBox.Focus(); 
    } 

Jetzt kommt die Klick-Funktionstaste, um das Bild beschneiden:

private void btnCrop_Click_1(object sender, EventArgs e) 
    { 
     Cursor = Cursors.Default; 

     try 
     { 
      if (cropWidth < 1) 
      { 
       return; 
      } 
      Rectangle rect = new Rectangle(cropX, cropY, cropWidth, cropHeight); 
      //First we define a rectangle with the help of already calculated points 
      Bitmap OriginalImage = new Bitmap(picBoxScreenshot.Image, picBoxScreenshot.Width, picBoxScreenshot.Height); 
      //Original image 
      Bitmap _img = new Bitmap(cropWidth, cropHeight); 
      // for cropinfo image 
      Graphics g = Graphics.FromImage(_img); 
      // create graphics 
      g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
      g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; 
      g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
      //set image attributes 
      g.DrawImage(OriginalImage, 0, 0, rect, GraphicsUnit.Pixel); 

      picBox.Image = _img; 
      picBox.Width = _img.Width; 
      picBox.Height = _img.Height; 
      PictureBoxLocation(); 
      cropWidth = 0; 
     } 
     catch (Exception ex){} 
    } 

private void PictureBoxLocation() 
    { 
     int _x = 0; 
     int _y = 0; 
     if (panel1.Width > picBox.Width) 
     { 
      _x = (panel1.Width - picBox.Width)/2; 
     } 
     if (panel1.Height > picBox.Height) 
     { 
      _y = (panel1.Height - picBox.Height)/2; 
     } 
     picBox.Location = new Point(_x, _y); 
     picBox.Refresh(); 
    } 
Verwandte Themen