如何在不更改纵横比的情况下裁剪图像

本文关键字:情况下 裁剪 图像 | 更新日期: 2023-09-27 18:26:10

我需要在不改变图像纵横比的情况下裁剪图像。我正在使用EDSDK从CANON1100D拍摄照片。捕获的图像:宽度=1920高度=1280
纵横比是1.5。但我需要一张纵横比将1.33的照片。


// 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));

它调整了图像的大小,所以图像的纵横比发生了变化,但它在图像中产生了压力。我想在运行时将图像(1920x1280)裁剪为(1600x1200)。

我如何通过编程实现这一点?

如何在不更改纵横比的情况下裁剪图像

 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");
 }

也许是这样的?

这是我的居中裁剪解决方案。


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;
}