水平调整 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#)的主要内容,如果未能解决你的问题,请参考以下文章

调整 bmp 图像大小

缩放,调整 bmp 结构大小,编程 c

水平图像滚动,图像大小调整以适合高度显示空白空间

如何水平调整图像大小(通过 CSS)以适合框?

调整大小以适合 div 中的图像,并水平和垂直居中

图像 <a> 垂直和水平对齐中心并在两者中都使用 % 调整大小