2009-04-27 17 views

Répondre

1

Vous pouvez créer une nouvelle image bitmap de la taille souhaitée et dessiner une partie de l'ancienne image sur la nouvelle à l'aide de Graphics.FromImage pour créer un objet Graphics qui dessine dans la nouvelle image. Assurez-vous de disposer de l'objet Graphics lorsque vous avez terminé, puis vous pouvez enregistrer l'image nouvellement créée.

5

Voici quelques cropping code bien documenté:

try 
{ 
    //create the destination (cropped) bitmap 
    Bitmap bmpCropped = new Bitmap(100, 100); 
    //create the graphics object to draw with 
    Graphics g = Graphics.FromImage(bmpCropped); 

    Rectangle rectDestination = new Rectangle(0, 0, bmpCropped.Width, bmpCropped.Height); 
    Rectangle rectCropArea = new Rectangle(myX, myY, myCropWidth, myCropHeight); 

    //draw the rectCropArea of the original image to the rectDestination of bmpCropped 
    g.DrawImage(myOriginalImage, rectDestination, rectCropArea,GraphicsUnit.Pixel); 
    //release system resources 
} 
finally 
{ 
    g.Dispose(); 
} 
+2

+1, mais vous devrait utiliser "using" (ou try/finally) pour s'assurer que g.Dispose() est appelé – Lucas

+0

Essayé votre code cela ne fonctionne pas. Je recadre un fichier ** bmp ** Je reçois une nouvelle image recadrée ** mais ** tout est blanc, il semble que le contenu de l'image elle-même n'est pas pris en compte, je continue à obtenir des choses vides. Toute proposition? – CoolStraw

+0

qui fonctionne parfaitement :) –

1
public static Bitmap Crop(Bitmap bitmap, Rectangle rect) 
{ 
    // create new bitmap with desired size and same pixel format 
    Bitmap croppedBitmap = new Bitmap(rect.Width, rect.Height, bitmap.PixelFormat); 

    // create Graphics "wrapper" to draw into our new bitmap 
    // "using" guarantees a call to gfx.Dispose() 
    using (Graphics gfx = Graphics.FromImage(croppedBitmap)) 
    { 
     // draw the wanted part of the original bitmap into the new bitmap 
     gfx.DrawImage(bitmap, 0, 0, rect, GraphicsUnit.Pixel); 
    } 

    return croppedBitmap; 
} 
1

Autres réponses travail, voici comment le faire en créant un extension method pour Image s:

class TestProgram 
{ 
    static void Main() 
    { 
     using (Image testImage = Image.FromFile(@"c:\file.bmp")) 
     using (Image cropped = 
        testImage.Crop(new Rectangle(10, 10, 100, 100))) 
     { 
      cropped.Save(@"c:\cropped.bmp"); 
     } 
    } 
} 

static public class ImageExtensions 
{ 
    static public Bitmap Crop(this Image originalImage, Rectangle cropBounds) 
    { 
     Bitmap croppedImage = 
      new Bitmap(cropBounds.Width, cropBounds.Height); 

     using (Graphics g = Graphics.FromImage(croppedImage)) 
     { 
      g.DrawImage(originalImage, 
       0, 0, 
       cropBounds, 
       GraphicsUnit.Pixel); 
     } 

     return croppedImage; 
    } 
} 
+0

donc tout ce que vous deviez faire était d'ajouter "ceci" à mon exemple: P – Lucas

+0

@Lucas: Exactement! En fait, il prend également une image au lieu d'être limité à un bitmap. (Sérieusement, quand la question a été soulevée, et avant que vous ayez posté, j'ai passé 5 minutes à écrire du code qui s'est avéré être presque identique au vôtre, donc j'ai fait une méthode d'extension pour ne pas avoir à le jeter Devinez d'où vient votre (actuellement) un upvote;]) –

Questions connexes