使用Bitmap.Clone()裁剪图像时,会创建大于原始图像尺寸的输出
原始尺寸为:5 M
输出裁剪图像为:28 M
如何在不损失质量和没有大尺寸的情况下进行裁剪? 我的代码是:
private static Image cropImage(Image img, Rectangle cropArea)
{
var bmpImage = new Bitmap(img);
Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
img.Dispose();
bmpCrop.Save(@"D:\Work\CropImage\CropImage\crop.jpg",bmpImage.RawFormat );
return (Image)(bmpCrop);
}
static void Main(string[] args)
{
string sourceimg = @"D:\Work\Crop Image\CropImage\4032x5808.jpg";
Image imageoriginal = Image.FromFile(sourceimg);
int HorX,HorY,VerX,VerY;
Console.WriteLine("Enter X 1 Cor. ");
HorX=int.Parse(Console.ReadLine());
Console.WriteLine("Enter Y 1 Cor. ");
HorY=int.Parse(Console.ReadLine());
Console.WriteLine("Enter X 2 Cor. ");
VerX=int.Parse(Console.ReadLine());
Console.WriteLine("Enter Y 1 Cor. ");
VerY= int.Parse(Console.ReadLine());
Rectangle rect = new Rectangle(HorX,HorY,VerX,VerY);
cropImage(imageoriginal, rect);
}
答案 0 :(得分:6)
您将图像保存为位图,而不是jpg或png,这可能是您的输入格式。更改格式类型,您将看到文件大小直线下降!
此代码示例可帮助您设置质量: -
var qualityEncoder = Encoder.Quality;
var quality = (long)<desired quality>;
var ratio = new EncoderParameter(qualityEncoder, quality );
var codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
var jpegCodecInfo = <one of the codec infos from ImageCodecInfo.GetImageEncoders() with mime type = "image/jpeg">;
bmp.Save(fileName, jpegCodecInfo, codecParams); // Save to JPG
答案 1 :(得分:0)
通常您不必担心在裁剪时降低质量,因为您只需以1:1的比例保存部分原始图像。
您的示例工作正常 - 问题必须在Rectangle
输入部分。由于您的变量名称令人困惑,我建议您在MSDN阅读相关内容。
确保只使用new Rectangle(200,100,800,800);
初始化您的矩形(假设您的图像大于1000x900)这将从左侧的200
像素开始裁剪区域并100
从顶部开始的像素,宽度和高度等于800
像素。
最终质量将保持不变,图像尺寸将更小。