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

时间:2017-12-25 15:53:46

标签: c# bmp cs50

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

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

我还没有在padding中添加,但我只处理了宽度可以被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]);
            }
        }

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

1 个答案:

答案 0 :(得分:1)

定义以下方法:

TypeError: Cannot read property 'content' of undefined

然后,在您的代码中,每当需要调整大小时:

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