c#自动裁剪图像

时间:2011-08-11 20:22:16

标签: c# crop

我有一个黑白System.Drawing.Bitmap我需要自动裁剪它,以便它只需要适合图像所需的大小。此图像始终从左上角(0,0)位置开始,但我不确定需要多少高度和宽度。如果有任何方法可以将其自动裁剪为大小?

2 个答案:

答案 0 :(得分:1)

以下是我使用的代码:

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

答案 1 :(得分:0)

如果您的图像不像我的那样从 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 方法更快的替代方法。