0

我正在尝试打开图像,为其添加边框并将图像保存在 C# 中。

我得到了一个代码,我猜这是堆栈溢出的答案。这里是:

    public Bitmap AddBorder(Bitmap image, Color color, int size)
    {
        Bitmap result = new Bitmap(image.Width + size * 2, image.Height + size * 2);
        Graphics g = Graphics.FromImage(result);
        g.Clear(color);
        int x = (result.Width - image.Width) / 2;
        int y = (result.Height - image.Height) / 2;
        g.DrawImage(image, new Point(x, y));
        g.Dispose();
        return result;
    }

我使用以下方法保存图像:resultimage.save(fileName);

我用大小为 5MP 的图像对其进行了测试。并将图像保存到磁盘。但是有一个错误。

结果的左侧和顶部有一个边框。图像似乎被放大了。例如,保存的图像会丢失部分内容(从正确的尺寸和底部)。

我做错什么了吗?

提前致谢。

4

1 回答 1

2

当输入位图的分辨率与视频适配器的分辨率不匹配时,这将出错。您可以使用调试器看到的东西。image.HorizontalResolution为和添加手表result.HorizontalResolution。你只会偶然得到一场比赛。DrawImage(Image, Point) 将重新缩放图像以使分辨率匹配,以使图像的外观尺寸与设计位图的机器上的尺寸相同。

您可以通过使用 Graphics.DrawImage(Image, Rectangle) 重载来解决它,这样您就可以直接控制图像的最终大小。使固定:

   g.DrawImage(image, new Rectangle(x, y, image.Width, image.Height));
于 2012-10-16T17:44:31.000 回答