Вырезать прозрачные части изображения
Большое спасибо, чувак, но я хотел сделать что-то немного по-другому, вырезать каждый прямоугольник здесь как отдельное изображение. Сначала попробуем найти границы синего блока. Звучит сложно, но на самом деле все просто.
посмотри, когда я сделал так далеко:
private unsafe Bitmap CodeImage(Bitmap bmp)
{
Bitmap bmpRes = new Bitmap(bmp.Width, bmp.Height);
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
IntPtr scan0 = bmData.Scan0;
int stride = bmData.Stride;
int nWidth = bmp.Width;
int nHeight = bmp.Height;
int minX = 10000 ;
int maxX = -10000;
int minY = 10000;
var maxY = -10000;
bool found = false;
for (int y = 0; y < nHeight; y++)
{
byte* p = (byte*)scan0.ToPointer();
p += y * stride;
for (int x = 0; x < nWidth; x++)
{
if (p[3]!=0) //Check if pixel is transpert;
{
found = true;
if (x < minX)
minX = x;
if (y < minY)
minY = y;
if (x > maxX)
maxX = x;
if (y > maxY)
maxY = y;
}
else
{
if (found)
{
Rectangle temp = new Rectangle(minX, minY, maxX - minX, maxY-minY);
return bmp.Clone(temp, bmp.PixelFormat);
}
}
p += 4;
}
}
return null;
}
Вы на самом деле написали, и я должен рассчитать ширину следующим образом:int width = maxX - minX;
и это на самом деле работает .. но высота 0 ....
Попробуйте это, выведите почти правильный прямоугольник с этими границами: (200 800 400, и0 на высоте). Я просто использовал части вашего кода в моем алгоритме, и да, вы были правы, но теперь есть небольшая проблема с высотой, я был бы очень признателен, если вы посмотрите