2012-02-28 1 views
3

Je dois recadrer une image sans changer son format. Je prends des photos de CANON1100D en utilisant EDSDK. L'image prise: Largeur = 1920 et Hauteur = 1280
ration Aspect est 1,5. mais j'ai besoin d'image quel ratio d'aspect est 1,33.Comment recadrer l'image sans changer le format d'image


// convert into processing resolution (1600,1200) 

Image<Bgr, byte> runtime_frm = new Image<Bgr, byte>(frame.ToBitmap(1600,1200)); 

// also in bitmap processing 

// Bitmap a = new Bitmap(runtime_frm.ToBitmap()); 
// Bitmap b = new Bitmap(a, new Size(1600,1200)); 

Il est en train de redimensionner l'image de sorte que le rapport d'aspect de l'image est modifié, mais il crée une contrainte dans l'image. J'ai besoin de recadrer l'image (1920x1280) à (1600x1200) en cours d'exécution.

Comment est-ce que je peux faire ceci par programme? n'importe quelle idée

+1

Je ne suis pas sûr d'avoir lu correctement vos conditions. Vous devez changer le rapport d'aspect de 1: 1.5 à 1: 1.333, mais sans changer le rapport d'aspect? –

+0

je dois ** recadrer ** une partie de l'image avec l'aspect ration 1: 1.33 de l'image originale de ratio d'aspect 1: 1.5 –

Répondre

3
public void Crop(Bitmap bm, int cropX, int cropY,int cropWidth,int cropHeight) 
{ 
     var rect = new System.Drawing.Rectangle(cropX,cropY,cropWidth,cropHeight); 

     Bitmap newBm = bm.Clone(rect, bm.PixelFormat); 

     newBm.Save("image2.jpg"); 
} 

Peut-être quelque chose comme ça?

source

+0

pourriez-vous expliquer les paramètres cropX, cropY? –

+0

cropX et cropY sont l'origine du rectangle utilisé pour recadrer l'image – TomP89

+1

La position où commencer le recadrage. x = 0 et y = 0 devrait commencer dans le coin supérieur gauche. Un point sur l'image. –

2

ceci est ma solution pour la culture centrée.


Bitmap CenterCrop(Bitmap srcImage, int newWidth, int newHeight) 
{ 
    Bitmap ret = null; 

    int w = srcImage.Width; 
    int h = srcImage.Height; 

    if (w < newWidth || h < newHeight) 
    { 
      MessageBox.Show("Out of boundary"); 
      return ret; 
    } 

    int posX_for_centerd_crop = (w - newWidth)/2; 
    int posY_for_centerd_crop = (h - newHeight)/2; 

    var CenteredRect = new Rectangle(posX_for_centerd_crop, 
          posY_for_centerd_crop, newWidth, newHeight); 

    ret = srcImage.Clone(imageCenterRect, srcImage.PixelFormat); 

    return ret; 
} 
Questions connexes