我有一些图像,其中底部和右侧包含大量空白。我想在向用户显示之前裁剪该空白区域。
到目前为止,我已经实现了从底部检测非白色像素。像素格式为Format32BppArgb。
byte[] byteImage = Convert.FromBase64String(imageString);
MemoryStream ms = new MemoryStream(byteImage, 0, byteImage.Length);
ms.Write(byteImage, 0, byteImage.Length);
Image image = Image.FromStream(ms, true);
Bitmap bmpImage = new Bitmap(image);
int imageDataHeight = bmpImage.Height;
int imageWidth = bmpImage.Width;
int imageHeight = bmpImage.Height;
BitmapData data = bmpImage.LockBits(new Rectangle(0, 0, imageWidth, imageHeight), ImageLockMode.ReadOnly, bmpImage.PixelFormat);
try
{
unsafe
{
int width = data.Width / 2;
for (int y = data.Height-1; y > 0 ; y--)
{
byte* row = (byte*)data.Scan0 + (y * data.Stride);
int blue = row[width * 3];
int green = row[width * 2];
int red = row[width * 1];
if ((blue != 255) || (green != 255) || (red != 255))
{
imageDataHeight = y + 50;
break;
}
}
}
}
finally
{
bmpImage.UnlockBits(data);
}
// cropping a rectangle based on imageDataHeight
// ...
如何正确地从右侧到左侧遍历列并检测非白色像素?