水平调整 BMP 图像大小的问题 (C#)
Posted
技术标签:
【中文标题】水平调整 BMP 图像大小的问题 (C#)【英文标题】:Issue with horizontally resizing BMP Image (C#) 【发布时间】:2017-12-25 15:53:46 【问题描述】:项目链接:https://github.com/FFladenmuller/resize-bmp
代码适用于系数为 1 的调整大小。但是,如果尝试更大的系数并打开图像,Photos 会说:“看起来我们不支持这种文件格式”。
我还没有添加填充,但我只处理了宽度可以被 4 整除的图像。
For 循环将 BGR 字节添加到新图像:
for (int i = 54; i < oldBMP.Info.Count - 2; i += 3)
for(int j = 0; j < sizeMultiplier; j++)
newBMP.Info.Add(oldBMP.Info[i]);
newBMP.Info.Add(oldBMP.Info[i + 1]);
newBMP.Info.Add(oldBMP.Info[i + 2]);
第一个 for 循环通过 BGR 三元组递增,第二个 for 循环添加每个像素 sizeMultiplier 次数。
【问题讨论】:
我的解决方案对您有用吗? 【参考方案1】:定义如下方法:
public static Bitmap ResizeImage(Bitmap image, Size size)
try
Bitmap result = new Bitmap(size.Width, size.Height);
using (Graphics g = Graphics.FromImage((Image)result))
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.AntiAlias;
g.DrawImage(image, 0, 0, size.Width, size.Height);
return result;
catch
return image;
然后,在您的代码中,每当需要调整大小时:
Bitmap image = new Bitmap(@"C:\Path\MyImage.bmp");
Single scaleWidth = 1.2f;
Int32 targetWidth = (Int32)((Single)image.Width * scaleWidth);
Single scaleHeight = 1.0f;
Int32 targetHeight = (Int32)((Single)image.Height * scaleHeight);
Size size = new Size(targetWidth, targetHeight);
Bitmap imageResized = ResizeImage(image, size);
一种替代方法(具有降低输出质量的缺点)如下:
Bitmap image = new Bitmap(@"C:\Path\MyImage.bmp");
Single scaleWidth = 1.2f;
Int32 targetWidth = (Int32)((Single)image.Width * scaleWidth);
Single scaleHeight = 1.0f;
Int32 targetHeight = (Int32)((Single)image.Height * scaleHeight);
Bitmap imageResized = new Bitmap(image, targetWidth, targetHeight);
【讨论】:
以上是关于水平调整 BMP 图像大小的问题 (C#)的主要内容,如果未能解决你的问题,请参考以下文章