C# 裁剪后的输出图像大于原始大小
当我使用Bitmap.Clone()裁剪图像时,它会创建大于原始图像大小的输出C# 裁剪后的输出图像大于原始大小,c#,image-processing,C#,Image Processing,当我使用Bitmap.Clone()裁剪图像时,它会创建大于原始图像大小的输出 原始尺寸为:5米 输出的裁剪图像为:28m 我如何在不损失质量的情况下进行裁剪,并且没有大尺寸? 我的代码是: private static Image cropImage(Image img, Rectangle cropArea) { var bmpImage = new Bitmap(img); Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.Pix
原始尺寸为:5米
输出的裁剪图像为:28m 我如何在不损失质量的情况下进行裁剪,并且没有大尺寸? 我的代码是:
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);
}
您正在将图像保存为位图,而不是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
var qualityEncoder=Encoder.Quality;
风险价值质量=(长期);
var比率=新编码器参数(qualityEncoder,quality);
var codeparams=新的编码器参数(1);
codeparams.Param[0]=比率;
var jpegCodecInfo=;
bmp.Save(文件名、JPEG编码信息、编码参数);//保存到JPG
您正在将图像保存为位图,而不是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
var qualityEncoder=Encoder.Quality;
风险价值质量=(长期);
var比率=新编码器参数(qualityEncoder,quality);
var codeparams=新的编码器参数(1);
codeparams.Param[0]=比率;
var jpegCodecInfo=;
bmp.Save(文件名、JPEG编码信息、编码参数);//保存到JPG
通常,您不必担心裁剪时会降低质量,只需以1:1的比例保存部分原始图像即可
您的示例工作正常-问题必须在矩形
输入部分。由于您的变量名令人困惑,我建议您在上一节阅读
当然,只需使用新矩形(200100800800)初始化矩形(假设图像大于1000x900)
这将从左侧的200
th像素和顶部的100
th像素开始裁剪区域,宽度和高度等于800
像素
最终质量将保持不变,图像大小将更小。通常,您不需要担心裁剪时质量会降低,因为您只需以1:1的比例保存部分原始图像 您的示例工作正常-问题必须在
矩形
输入部分。由于您的变量名令人困惑,我建议您在上一节阅读
当然,只需使用新矩形(200100800800)初始化矩形(假设图像大于1000x900)
这将从左侧的200
th像素和顶部的100
th像素开始裁剪区域,宽度和高度等于800
像素
最终质量将保持不变,图像大小将更小。请添加一些代码库!原始图像的格式是什么?在哪里创建
矩形cropera
?代码是什么?尽量保存为<代码> JPG<代码>,而不是<代码> RAWFrase你输入的代码> HORX,HorY,VerX,非常 -请考虑它们的真正含义是<代码> x,y,从左到右的宽度,从上到下的高度< /代码>?此外,第四个字符串中几乎没有输入错误-它应该是(“输入Y 2 Cor.”)代码>请添加一些代码兵营!原始图像的格式是什么?在哪里创建矩形cropera
?代码是什么?尽量保存为<代码> JPG<代码>,而不是<代码> RAWFrase你输入的代码> HORX,HorY,VerX,非常 -请考虑它们的真正含义是<代码> x,y,从左到右的宽度,从上到下的高度< /代码>?此外,第四个字符串中几乎没有输入错误-它应该是(“输入Y 2 Cor.”)
我试图将输出保存为jpg或png,同样的问题原始图像的格式为“jpg”,谢谢Ross的帮助:)我试图将输出保存为jpg或png,同样的问题原始图像的格式为“jpg”,谢谢Ross的帮助:)