c#自动裁剪图像
本文关键字:图像 裁剪 | 更新日期: 2023-09-27 18:05:11
我有一个黑白的System.Drawing.Bitmap
,我需要自动裁剪它,这样它就像需要的那样大,以适合图像。这个图像总是从左上角(0,0)的位置开始,但我不确定需要多少高度和宽度。如果有什么方法可以自动裁剪它的大小?
我使用的代码如下:
// 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
方法更快的替代方案。