Я ищу решение для обнаружения граничных пробелов растрового изображения С# из управляемой библиотеки GDI+ С#.
Изображения будут либо прозрачными, либо белыми. Большинство изображений с увеличением 400x имеют размер 8000x8000 пикселей с пустым пространством около 2000 пикселей по краям.
Каким будет наиболее эффективный способ узнать края, координаты x, y, высоты и ширины? Я пробовал идти попиксельно, но обнаружил, что это очень медленно.
Обновление до решения -- добавлены левые/правые/верхние/нижние границы
Проблемы с центрированием деталей изображений, теперь обрезаются любые прозрачные (0%) или белые (#FFFFFF) пиксели.
var top = bitmap.Height;
var left = bitmap.Width;
var right = 0;
var bottom = 0;
...
var pData = pData0 + (y * data.Stride) + (x * 4);
var xyAlpha = pData[3];
var xyBlue = pData[0];
var xyGreen = pData[1];
var xyRed = pData[2];
if ((xyAlpha > 0) || (xyRed != 255 && xyGreen != 255 && xyBlue != 255)) {
if (y < top)
top = y;
if (y > bottom)
bottom = y;
if (x < left)
left = x;
if (x > right)
right = x;
}
...
var cropWidth = right - left;
var cropHeight = bottom - top;
var cropX = top;
var cropY = left;
var cacheBitmap = new Bitmap(cropWidth, cropHeight, PixelFormat.Format32bppArgb);
using (var cacheGraphics = Graphics.FromImage(cacheBitmap)) {
cacheGraphics.DrawImage(context.Image, new Rectangle(0, 0, cropWidth, cropHeight), cropX, cropY, cropWidth, cropHeight, GraphicsUnit.Pixel);
}