C# 将图像缩放到1600x700像素
当用户上传任何图像时,我们可以将其缩放到1600 X 700吗 我正在使用下面的代码来缩放1996 X 1442的图像,但它从未缩放到1600 X 700 有没有更好的方法或其他方法来实现它C# 将图像缩放到1600x700像素,c#,image,C#,Image,当用户上传任何图像时,我们可以将其缩放到1600 X 700吗 我正在使用下面的代码来缩放1996 X 1442的图像,但它从未缩放到1600 X 700 有没有更好的方法或其他方法来实现它 private static Image resizeImage(Image imgToResize, Size size) { int sourceWidth = imgToResize.Width; int sourceHeight = i
private static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
private static Image resizeImage(图像imgToResize,大小)
{
int sourceWidth=imgToResize.Width;
int sourceHeight=imgToResize.Height;
浮动百分比=0;
浮动nPercentW=0;
浮点数nPercentH=0;
nPercentW=((float)size.Width/(float)sourceWidth);
nPercentH=((浮点)size.Height/(浮点)sourceHeight);
如果(nPercentH
如果你查看下面的评论,他们说如果不降低纵横比就无法存档,但是如果我看到airbnb
中的英雄图像,他们的图像是1600 X 700
因此,我认为这在某种程度上是可能的,但我不知道如何实现…当然不是,因为1600 x 700的纵横比(0.4375)与1996 x 1442(0.7724)不同。你这样做的方式是保持纵横比的比例,所以从1996年到1442年,你永远不会达到1600 x 700 你可以:
int destWidth = (int)...;
int destHeight = (int)...;
简单地删去小数点。即使计算结果为699.9,destWidth
也将为699
您可能想改用
Math.Round
,这会像预期的那样将699.9到700进行取整。我在几个方面调整了您的方法:
,但很容易更改。)g
上,因此您最终会得到等量的左右或顶部和底部修剪。(在不知道原始图像的比例是否正确的情况下,您必须以某种方式决定要修剪图像的哪些位。)private static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
double wRatio = (double)size.Width / sourceWidth;
double hRatio = (double)size.Height / sourceHeight;
int destWidth, destHeight;
float top, left;
if (wRatio > hRatio) // reverse for white bars rather than trimming
{
destWidth = size.Width;
destHeight = (int)Math.Ceiling(sourceHeight * wRatio);
left = 0;
top = (destHeight - size.Height) / 2f;
}
else
{
destHeight = size.Height;
destWidth = (int)Math.Ceiling(sourceWidth * hRatio);
top = 0;
left = (destWidth - size.Width) / 2f;
}
Bitmap b = new Bitmap(size.Width, size.Height);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, left, top, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
此代码保留了原始图像的外观。如果保留它并不重要,那么您可以去掉比率计算部分,创建一个直接提供大小的位图对象
private static Image resizeImage(Image imgToResize, Size size)
{
Bitmap b = new Bitmap(size.Width, size.Height);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
嗯,事实上是的!这个世界上几乎没有什么不可能的事。只需尝试搜索有关“”的信息。很抱歉,这里没有代码,因为我对这些算法不太熟悉。您会遇到什么错误,或者操作的结果是什么?您需要调整图像的大小,因为纵横比不同。请检查此。尺寸=新尺寸(10000700);var测试=大小图像(演示,大小);给我一张989*699的图像舍入问题是问题的一部分-基本上,在计算
destWidth
和destWidth
时,您正在删除小数点。如果您使用Math.Round
并始终使用“up”进行取整,您可能会得到您所期望的结果。我查看了airbnb网站。令我惊讶的是,他们有分辨率为1600*700的图像。知道他们是如何做到的吗。。。。这就是我所期待的。。1) 我不想失去纵横比2)我希望图像是1600*700。。从评论来看,我觉得这是不可能的。但如果我看到像airbnb这样的网站,他们正在实现这一目标。他们的英雄形象大小都是1600*700。好吧,也许他们只是删掉了形象的相关部分?你能给我一个片段吗?我不想让形象失真…:(它做得很好,但不是确切的东西……它给了我适当的宽度,即1600,但没有给我适当的高度700。我想你可以再调整一下……谢谢你的帮助和支持。@user1921045啊,是的,一秒钟……应该可以it@user1921045,这就是我写的,如果保留纵横比并不重要,你可以使用它s代码。我只是想帮忙。