Я действительно не уверен, что правильно вас понял, но вот код, который делает только красные части изображения видимыми.
Вы можете изменить его только на красные части, невидимые, изменив> на < по сравнению с 200. Вы также можете сыграть с номером 200, чтобы узнать, какой порог хорош для вашей красной проверки.
private static unsafe void OnlyRed(Bitmap bitmap, Color replacement)
{
var redOffset = 0;
var bpp = 32;
var bytesRep = new List<byte> {replacement.R, replacement.G, replacement.B};
switch (bitmap.PixelFormat)
{
case PixelFormat.Format24bppRgb:
bpp = 24;
break;
case PixelFormat.Format32bppArgb:
redOffset = 8;
bytesRep.Insert(0, replacement.A);
break;
case PixelFormat.Format32bppRgb:
case PixelFormat.Canonical:
bytesRep.Add(replacement.A);
break;
default:
throw new NotSupportedException("Pixel format unsupported.");
}
var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite,
bitmap.PixelFormat);
var start = (byte*)data.Scan0;
var end = start + data.Height * data.Stride;
for (var curr = start; curr < end; curr += bpp/8)
{
if (curr[redOffset] > 200)
{
continue;
}
for (var i = 0; i < bytesRep.Count; i++)
{
curr[i] = bytesRep[i];
}
}
bitmap.UnlockBits(data);
}
Использование:
var bitmap = new Bitmap("file location...");
OnlyRed(bitmap, Color.Transparent);
Когда вы говорите, кадрирование, вы имеете в виду ...? Вы хотите удалить красную рамку? Вы хотите сделать все красное изображение белым/прозрачным/etc? – SimpleVar
Я имею в виду отсечение объекта с указанным цветом – user2012
например, красный шар в воображении – user2012