如何在不改变纵横比的情况下裁剪图片

4

我需要裁剪一张图片,但不改变它的长宽比。我使用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));

这段代码是调整图片大小,因此会改变图片的宽高比,但这样做会在图片中产生压力。我希望在运行时将图片裁剪为(1600x1200),原始尺寸为(1920x1280)。

请问如何以编程方式实现?


1
我不确定我是否正确理解了您的条件。您需要将宽高比从1:1.5更改为1:1.333,但又不能更改宽高比? - Mr Lister
我需要从宽高比为1:1.5的原始图像中裁剪出一个宽高比为1:1.33的图像部分。 - Nikson Kanti Paul
2个回答

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

也许就像这样? 源代码

请您解释一下参数 cropX 和 cropY 的含义? - Nikson Kanti Paul
cropX和cropY是用于裁剪图像的矩形的起始点。 - TomP89
1
开始裁剪的位置。 x = 0 和 y = 0 应该从左上角开始。图像上的一个点。 - auo

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接