Обработка изображений (LockBits). Проблемы с условием цикла по обработке каждого пикселя - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Вопрос обстоит так. Хочу разобраться с обработкой изображений. Как понял, для этого необходимо загрузить изображение в bitmap, и, используя LockBits, можно изменить значение каждого пикселя (источник вдохновения). У меня получился такой код (по сути, тоже самое, с другими названиями, но, мало ли):
Листинг программы
  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3. label1.Text = "";
  4. Bitmap img = new Bitmap("D:/1.jpg");
  5. Rectangle img_zone = new Rectangle(0, 0, img.Width, img.Height);
  6. System.Drawing.Imaging.BitmapData img_data = img.LockBits(img_zone, System.Drawing.Imaging.ImageLockMode.ReadWrite, img.PixelFormat);
  7. IntPtr img_first_pixel = img_data.Scan0;
  8. int img_bytes = Math.Abs(img_data.Stride * img.Height);
  9. byte[] img_rgbValues = new byte[img_bytes];
  10. System.Runtime.InteropServices.Marshal.Copy(img_first_pixel, img_rgbValues, 0, img_bytes);
  11. /*ОБРАБОТКА*/
  12. for (int c = 0; c <= img_rgbValues.Length; c++/*Вот здесь появляются проблемы*/)
  13. {
  14. img_rgbValues[c] = 255;
  15. }
  16. /*КОНЕЦ ОБРАБОТКИ*/
  17. System.Runtime.InteropServices.Marshal.Copy(img_rgbValues, 0, img_first_pixel, img_bytes);
  18. img.UnlockBits(img_data);
  19. img.Save("D:/2.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
  20. img.Dispose();
  21. }
Собственно, вопрос состоит в том, почему нельзя в условии цикла указывать последовательный перебор пикселей, начиная от нулевого и с шагом 1? Мысли были разные, сначала подумал, что в этом массиве может в начале храниться информация о формате и т.д., но если вручную написать:
Листинг программы
  1. img_rgbValues[0]=255;
  2. img_rgbValues[1]=255;
  3. img_rgbValues[2]=255;
, то всё получится - для изображений любого размера. Потом решил, что дело в размере изображения, и попробовал использовать картинку 10х10. И тогда в теле цикла нужно было прописывать начальное значение не меньше 3. Понимаю, что вопрос вообще какой-то странный и глупый, что ответ может лежать где-то совсем на поверхности и, возможно, я не понимаю элементарного, но теперь не успокоюсь, пока не разберусь Так же, возможно, для частотной обработки изображений я выбрал вообще не тот подход для начала (так как смущает то, что нужно будет умножать пиксели на нецелые числа, то есть, уже не byte массив, а double). Но это уже другой вопрос. Буду благодарен за любые ссылки и советы в сторону решения.

Решение задачи: «Обработка изображений (LockBits). Проблемы с условием цикла по обработке каждого пикселя»

textual
Листинг программы
  1.             for (int c = 0; c <= img_rgbValues.Length; c++/*Вот здесь появляются проблемы*/)
  2.             {
  3.                 img_rgbValues[c] = 255;
  4.                
  5.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы