裁剪图像C#Distorion

时间:2016-04-21 17:20:35

标签: c# image

我正在尝试使用C#裁剪图像,但我遇到了一些问题。

我需要裁剪此图片并从顶部删除15个像素:

我使用过这段代码:

Bitmap myBitmap = new Bitmap(outputFileName);
Rectangle destRectangle = new Rectangle(new Point(0, 15),
new Size(myBitmap.Width, myBitmap.Height));
Bitmap bmp = new Bitmap(myBitmap.Width, myBitmap.Height - 15);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(myBitmap, 0, 0, destRectangle, GraphicsUnit.Pixel);
bmp.Save(outputFileNameCut, ImageFormat.Png);

这是第一个带缩放的图像质量:

enter image description here

这是第二个:

enter image description here

我如何才能拥有相同的图像质量?

3 个答案:

答案 0 :(得分:2)

问题是你抓住的矩形高于位图中的矩形(第二个Size参数是大小,而不是右下角坐标),所以它要缩放它:< / p>

Rectangle destRectangle = new Rectangle(
       new Point(0, 15), new Size(myBitmap.Width, myBitmap.Height-15));

这应该有用......因为它实际上不是dest矩形,而是source调用上的DrawImage矩形

裁剪的其他方式,甚至不需要Graphics对象可能是:

Bitmap myBitmap = new Bitmap(outputFileName);
Rectangle srcRectangle = new Rectangle(
       new Point(0, 15), new Size(myBitmap.Width, myBitmap.Height-15));
Bitmap croppedBitmap = myBitmap.Clone(srcRectangle, myBitmap.PixelFormat);
croppedBitmap.Save(outputFileNameCut, ImageFormat.Png);

如果您使用此方法,请100%确保裁剪矩形不会越过原始图像的边界,因为Clone会抛出异常(如果有)。

答案 1 :(得分:1)

尝试粘贴

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;

在调用DrawImage之前

或使用

g.DrawImageUnscaled(myBitmap, new Point(0, -15));

答案 2 :(得分:0)

尝试使用ImageProcessor框架。它可以使用.Quality()方法轻松处理。