水平调整BMP图像(C#)的问题

问题描述 投票:-2回答:1

链接到项目:https://github.com/FFladenmuller/resize-bmp

代码适用于因子为1的调整大小。但是,如果尝试更大的因子并打开图像,则照片说:“看起来我们不支持此文件格式”。

我还没有添加填充,但我只使用宽度可被4整除的图像。

For循环将BGR字节添加到新Image:

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]);
            }
        }

首先是循环增加通过BGR三元组,第二个循环增加每个像素大小乘以多次。

c# bmp cs50
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.