我正在尝试调整图片大小。此代码生成具有原始尺寸的图像(不执行调整大小)。
Image original = Image.FromFile(Server.MapPath("~/SavedFiles/Audios/") + fileNameF);
Image resized = ResizeImage(original, new Size(200, 200));
MemoryStream memStream = new MemoryStream();
resized.Save(memStream, ImageFormat.Jpeg);
点击按钮,我正在调用此代码:
public static Image ResizeImage(Image image, Size size, bool preserveAspectRatio = true)
{
int newWidth;
int newHeight;
if (preserveAspectRatio)
{
int originalWidth = image.Width;
int originalHeight = image.Height;
float percentWidth = (float)size.Width / (float)originalWidth;
float percentHeight = (float)size.Height / (float)originalHeight;
float percent = percentHeight < percentWidth ? percentHeight : percentWidth;
newWidth = (int)(originalWidth * percent);
newHeight = (int)(originalHeight * percent);
}
else
{
newWidth = size.Width;
newHeight = size.Height;
}
Image newImage = new Bitmap(newWidth, newHeight);
using (Graphics graphicsHandle = Graphics.FromImage(image))
{
graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphicsHandle.DrawImage(newImage, 0, 0, newWidth, newHeight);
}
return newImage;
}
答案 0 :(得分:2)
这是我根据你的代码做的方式,我测试的是在文件中使用我的图像并在指定的文件夹中找到它。它工作正常。您的代码只有小问题(请参阅我对Stream的评论,尤其是newImage
声明中的评论):
private void button1_Click(object sender, EventArgs e) {
Image original = Image.FromFile(Application.StartupPath + "\\ChessSet_Orig.JPG");
Image resized = ResizeImage(original, new Size(200, 200));
FileStream fileStream = new FileStream(Application.StartupPath + "\\ChessSet_resized.JPG", FileMode.Create); //I use file stream instead of Memory stream here
resized.Save(fileStream, ImageFormat.Jpeg);
fileStream.Close(); //close after use
}
public static Image ResizeImage(Image image, Size size, bool preserveAspectRatio = true) {
int newWidth;
int newHeight;
if (preserveAspectRatio) {
int originalWidth = image.Width;
int originalHeight = image.Height;
float percentWidth = (float)size.Width / (float)originalWidth;
float percentHeight = (float)size.Height / (float)originalHeight;
float percent = percentHeight < percentWidth ? percentHeight : percentWidth;
newWidth = (int)(originalWidth * percent);
newHeight = (int)(originalHeight * percent);
} else {
newWidth = size.Width;
newHeight = size.Height;
}
Image newImage = new System.Drawing.Bitmap(image, newWidth, newHeight); // I specify the new image from the original together with the new width and height
using (Graphics graphicsHandle = Graphics.FromImage(image)) {
graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphicsHandle.DrawImage(newImage, 0, 0, newWidth, newHeight);
}
return newImage;
}
结果如下,
原始图像尺寸为820 x 760