Получить значение пикселя - C#
Формулировка задачи:
Стоит задача быстро получить значения всех пикселей изображения. Решаю так:
Кладем изображение в массив байтов:
Получаю значение по заданным x,y:
Однако код возвращает полную ерунду. Подскажите пожалуйста, где ошибка?
Листинг программы
- // Получаем высоту и ширину bitmap
- Width = ImageSource.Width;
- Height = ImageSource.Height;
- //лочим область по размеру изображения
- bitmapData = ImageSource.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, ImageSource.PixelFormat);
- //глубина изображения (число бит на пиксель)
- Depth = Bitmap.GetPixelFormatSize(ImageSource.PixelFormat);
- //число байт на пиксель
- int bytesPerPixel = Depth / 8;
- //общее число байтов для изображения
- int byteCount = bytesPerPixel * Height * Width;
- //пустой массив байтов изображения
- Pixels = new byte[byteCount];
- //указатель на первый пиксель
- ptrFirstPixel = bitmapData.Scan0;
- //копируем данные из указателя в массив байтов
- Marshal.Copy(ptrFirstPixel, Pixels, 0, Pixels.Length);
Листинг программы
- public Color GetPixel(int x, int y)
- {
- Color clr = Color.Empty;
- //число байт на пиксель
- int bytesPerPixel = Depth / 8;
- //число байт в одной строке пикселей изображения
- int widthInBytes = bitmapData.Width * bytesPerPixel;
- //индекс первого байта пикселя
- int i = y * widthInBytes + x * bytesPerPixel;
- if (i >= Pixels.Length - bytesPerPixel) throw new IndexOutOfRangeException();
- int b = Pixels[i];
- int g = Pixels[i + 1];
- int r = Pixels[i + 2];
- clr = Color.FromArgb(r, g, b);
- return clr;
- }
Решение задачи: «Получить значение пикселя»
textual
Листинг программы
- public Color GetPixel(int x, int y)
- {
- Color clr = Color.Empty;
- //число байт на пиксель
- int bytesPerPixel = Depth / 8;
- //индекс первого байта пикселя
- int i = y * bitmapData.Stride + x * bytesPerPixel;
- if (i >= Pixels.Length - bytesPerPixel) throw new IndexOutOfRangeException();
- int b = Pixels[i];
- int g = Pixels[i + 1];
- int r = Pixels[i + 2];
- clr = Color.FromArgb(r, g, b);
- return clr;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д