2012-02-28 75 views
14

No tengo idea de cómo para cortar una imagen rectangular de otra imagen grande.Cómo cortar una parte de la imagen en C#

Digamos que hay 300 x 600 image.png.

quiero sólo para cortar un rectángulo con X: 10 y 20, con 200, altura 100 y guardarlo en otro archivo.

¿Cómo puedo hacerlo en C#?

Gracias !!!

+0

@Brian: publique esto como respuesta (tal vez con algún código entre comillas/referencias) para que podamos votarlo. – RQDQ

+0

¿Su imagen tiene partes transparentes? El enlace de Brian no ayudará si necesita transparencia, ya que los mapas de bits no lo admiten. – Msonic

+0

@Msonic No, no lo hace –

Respuesta

22

Eche un vistazo a Graphics Class en MSDN.

Aquí hay un ejemplo que le apuntan en la dirección correcta (nótese el objeto Rectangle):

public Bitmap CropImage(Bitmap source, Rectangle section) 
{ 
// An empty bitmap which will hold the cropped image 
Bitmap bmp = new Bitmap(section.Width, section.Height); 

Graphics g = Graphics.FromImage(bmp); 

// Draw the given area (section) of the source image 
// at location 0,0 on the empty bitmap (bmp) 
g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel); 

return bmp; 
} 

// Example use:  
Bitmap source = new Bitmap(@"C:\tulips.jpg"); 
Rectangle section = new Rectangle(new Point(12, 50), new Size(150, 150)); 

Bitmap CroppedImage = CropImage(source, section); 
16

Otra forma de corp una imagen será para clonar la imagen con puntos de partida específicos y tamaño.

int x= 10, y=20, width=200, height=100; 
Bitmap source = new Bitmap(@"C:\tulips.jpg"); 
Bitmap CroppedImage = source.Clone(new System.Drawing.Rectangle(x, y, width, height), source.PixelFormat); 
+1

¡Esta es una respuesta mucho mejor ya que no requiere cargar un ensamblaje externo como 'Gráficos' para lograr el objetivo! – Andry

+0

Después de hacer el clon, puede llamar a la función dispose() de la fuente (source.Dispose();) si desea liberar cualquier manejador del mapa de bits original. si desea eliminar la imagen original, por ejemplo, y conservar solo la versión recortada, deberá llamar a la función de eliminación() antes de eliminar la imagen original. solo en caso de que alguien quiera hacer esta operación. – Alexei

+0

La solución de gráficos es mucho más rápida que la clonación, prefiero no usar clonación de bitmaps, ya que no es un clon profundo. Y no estoy seguro de que su disposición funcione en esta situación, ambos mapas de bits usarán los mismos datos de píxeles –

Cuestiones relacionadas