c#自动裁剪图像

本文关键字:图像 裁剪 | 更新日期: 2023-09-27 18:05:11

我有一个黑白的System.Drawing.Bitmap,我需要自动裁剪它,这样它就像需要的那样大,以适合图像。这个图像总是从左上角(0,0)的位置开始,但我不确定需要多少高度和宽度。如果有什么方法可以自动裁剪它的大小?

c#自动裁剪图像

我使用的代码如下:

    // Figure out the final size
    int maxX = 0;
    int maxY = 0;
    for (int x = 0; x < bitmap.Width; x++)
    {
        for (int y = 0; y < bitmap.Height; y++)
        {
            System.Drawing.Color c = bitmap.GetPixel(x, y);
            System.Drawing.Color w = System.Drawing.Color.White;
            if (c.R != w.R || c.G != w.G || c.B != w.B)
            {
                if (x > maxX)
                    maxX = x;
                if (y > maxY)
                    maxY = y;
            }
        }
    }
    maxX += 2;

如果你的图像不像我的那样从0,0开始,这里有一个变体,可以让你自动裁剪边界:

public static Rectangle GetAutoCropBounds(Bitmap bitmap)
{
    int maxX = 0;
    int maxY = 0;
    int minX = bitmap.Width;
    int minY = bitmap.Height;
    for (int x = 0; x < bitmap.Width; x++)
    {
        for (int y = 0; y < bitmap.Height; y++)
        {
            var c = bitmap.GetPixel(x, y);
            var w = Color.White;
            if (c.R != w.R || c.G != w.G || c.B != w.B)
            {
                if (x > maxX)
                    maxX = x;
                if (x < minX)
                    minX = x;
                if (y > maxY)
                    maxY = y;
                if (y < minY)
                    minY = y;
            }
        }
    }
    maxX += 2;
    return new Rectangle(minX, minY, maxX - minX, maxY - minY);
}

注意:如果您正在处理大量或高分辨率的图像,那么您将需要寻找比GetPixel方法更快的替代方案。