У меня есть растровое изображение, и я хочу получить значения цвета из пикселей, но только в определенных областях изображения. Я хочу получить пиксели изображения для полной ширины и только немного высоты (скажем, height = 1), а затем я хочу переместить позицию на единицу вниз и получить те же значения.
Я использую
for (int i = 0; i < 302; i++)
{
Rectangle cloneRect = new Rectangle(0, i, 514, 1);
System.Drawing.Imaging.PixelFormat format = bm.PixelFormat;
Bitmap cloneBitmap = bm.Clone(cloneRect, format);
bitMapList.Add(cloneBitmap);
}
foreach (Bitmap bmp in bitMapList)
{
c = bmp.GetPixel(514, 1);
r = Convert.ToInt16(c.R);
lumi.Add(r);
}
Оператор for для создания областей, которые я хочу на растровом изображении, а затем foreach для цикла по этим растровым изображениям, а затем для получения значений. Единственная проблема в том, что я получаю сообщение об ошибке «Параметр должен быть положительным и <Ширина».
На линии
c = bmp.GetPixel(514, 1);
Кто-нибудь знает почему?
Благодарность
2 ответа
Вам необходимо убедиться, что получаемый пиксель находится внутри изображения (что не должно быть так). Вы можете заключить это в вызов, чтобы сначала запустить проверку, например:
public static Color GetPixelSafe(Bitmap image, int x, int y) {
if (x >= image.Width) x = image.Width - 1;
else if (x < 0) x = 0;
if (y >= image.Height) y = image.Height - 1;
else if (y < 0) y = 0;
return image.GetPixel(x, y);
}
Теперь это не исправит ваш алгоритм обработки, но должно, по крайней мере, исправить исключение. Еще один указатель: если вы собираетесь обрабатывать много значений цвета, и производительность является проблемой, вам действительно стоит подумать об использовании image.LockBits
вместо GetPixel
. Дополнительную информацию об этом см. Здесь: http: // msdn.microsoft.com/en-us/library/5ey6h79d(v=vs.110).aspx.
Кажется, что 514 больше, чем фактическая ширина вашего изображения. Как вы пришли к этому числу?
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.