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