2012-01-04 16 views

risposta

14

Usa Graphics.DrawImage Method (Image, RectangleF, RectangleF, GraphicsUnit) metodo.

Dim fileName = "C:\file.jpg" 
    Dim CropRect As New Rectangle(100, 0, 100, 100) 
    Dim OriginalImage = Image.FromFile(fileName) 
    Dim CropImage = New Bitmap(CropRect.Width, CropRect.Height) 
    Using grp = Graphics.FromImage(CropImage) 
     grp.DrawImage(OriginalImage, New Rectangle(0, 0, CropRect.Width, CropRect.Height), CropRect, GraphicsUnit.Pixel) 
     OriginalImage.Dispose() 
     CropImage.Save(fileName) 
    End Using 
+3

Usa Dispose() al posto della MemoryStream Hack. –

+0

Grazie! Ho aggiornato. – adatapost

+0

+1 proprio quello di cui ho bisogno. Ma il file sarà anche jpg? –

2

Rif: Graphics.DrawImage e Image Cropping with Image Resizing Using VB.NET

private void btnCropImage_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog dlg = new OpenFileDialog(); 
     dlg.ShowDialog(); 
     //check your filename or set constraint on fileopen dialog 
     //to open image files 
     string str = dlg.FileName; 

     //Load Image File to Image Class Object to make crop operation 
     Image img = System.Drawing.Bitmap.FromFile(str); 

     // Create rectangle for source image, what ever it's size. 
     GraphicsUnit units = GraphicsUnit.Pixel; 
     RectangleF srcRect = img.GetBounds(ref units); 

     // Create rectangle for displaying image - leaving 100 pixels from left saving image size. 
     RectangleF destRect = new RectangleF(100.0F, 0.0F, srcRect.Width - 100, srcRect.Height); 

     // Bitmap class object to which saves croped image 
     Bitmap bmp = new Bitmap((int)srcRect.Width - 100, (int)srcRect.Height); 

     // Draw image to screen. 
     Graphics grp = Graphics.FromImage(bmp); 
     grp.DrawImage(img, destRect, srcRect, units); 

     //save image to disk 
     bmp.Save("e:\\img.jpeg", System.Drawing.Imaging.ImageFormat.Jpeg); 

     //Clear memory for Unused Source Image 
     img.Dispose(); 
    } 

Spero che questo aiuto voi ..

0

Regione "Immagine Ritaglio"

Dim cropX As Integer 
Dim cropY As Integer 
Dim cropWidth As Integer 
Dim cropHeight As Integer 

Dim oCropX As Integer 
Dim oCropY As Integer 
Dim cropBitmap As Bitmap 

Public cropPen As Pen 
Public cropPenSize As Integer = 1 '2 
Public cropDashStyle As Drawing2D.DashStyle = Drawing2D.DashStyle.Solid 
Public cropPenColor As Color = Color.Yellow 
Private Sub RotateBtn_Click(sender As System.Object, e As EventArgs) Handles RotateBtn.Click 

    ' RotateImage(PreviewPictureBox.Image, offset:=, angle:=90) 
    crobPictureBox.Image.RotateFlip(RotateFlipType.Rotate270FlipNone) 
    'PreviewPictureBox.Image.RotateFlip(RotateFlipType.Rotate270FlipNone) 
    '(45, PreviewPictureBox.Image) 
End Sub 
Private Sub crobPictureBox_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles crobPictureBox.MouseDown 
    Try 

     If e.Button = Windows.Forms.MouseButtons.Left Then 

      cropX = e.X 
      cropY = e.Y 

      cropPen = New Pen(cropPenColor, cropPenSize) 
      cropPen.DashStyle = DashStyle.DashDotDot 
      Cursor = Cursors.Cross 

     End If 
     crobPictureBox.Refresh() 
    Catch exc As Exception 
    End Try 
End Sub 
Dim tmppoint As Point 
Private Sub crobPictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles crobPictureBox.MouseMove 
    Try 

     If crobPictureBox.Image Is Nothing Then Exit Sub 

     If e.Button = Windows.Forms.MouseButtons.Left Then 

      crobPictureBox.Refresh() 
      cropWidth = e.X - cropX 
      cropHeight = e.Y - cropY 
      crobPictureBox.CreateGraphics.DrawRectangle(cropPen, cropX, cropY, cropWidth, cropHeight) 
     End If 
     ' GC.Collect() 

    Catch exc As Exception 

     If Err.Number = 5 Then Exit Sub 
    End Try 

End Sub 

Private Sub crobPictureBox_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles crobPictureBox.MouseUp 
    Try 
     Cursor = Cursors.Default 
     Try 

      If cropWidth < 1 Then 
       Exit Sub 
      End If 

      Dim rect As Rectangle = New Rectangle(cropX, cropY, cropWidth, cropHeight) 
      Dim bit As Bitmap = New Bitmap(crobPictureBox.Image, crobPictureBox.Width, crobPictureBox.Height) 

      cropBitmap = New Bitmap(cropWidth, cropHeight) 
      Dim g As Graphics = Graphics.FromImage(cropBitmap) 
      g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic 
      g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality 
      g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality 
      g.DrawImage(bit, 0, 0, rect, GraphicsUnit.Pixel) 
      ' g.DrawImage(bit, 0, 0, rect,GraphicsUnit.Pixel) 
      PreviewPictureBox.Image = cropBitmap 

     Catch exc As Exception 
     End Try 
    Catch exc As Exception 
    End Try 
End Sub 
+0

funziona come previsto ... – sudhakar