Получение цветов пикселей монохромного изображения с помощью C#C#

Место общения программистов C#
Ответить
Anonymous
 Получение цветов пикселей монохромного изображения с помощью C#

Сообщение Anonymous »


Как сказано в теме, у меня есть изображение .bmp, и мне нужно написать код, который сможет получить цвет любого пикселя изображения. Это (индексированное) изображение размером 1 бит на пиксель, поэтому цвет будет либо черным, либо белым. Вот код, который у меня сейчас есть:

//Этот метод блокирует биты строки пикселей Private BitmapData LockLine (растровое изображение bmp, int y) { Прямоугольник lineRect = новый прямоугольник (0, y, bmp.Width, 1); Строка BitmapData = bmp.LockBits(lineRect, ImageLockMode.ReadWrite, bmp.PixelFormat); обратная линия; } //Этот метод принимает BitmapData строки пикселей //и возвращает цвет того, который имеет нужную координату x частный цвет GetPixelColor (данные BitmapData, int x) { //Я не уверен, правильна ли эта строка IntPtr pPixel = data.Scan0 + x; //Следующий код работает для изображения с разрешением 24 бита на пиксель: байт[] rgbValues ​​= новый байт[3]; System.Runtime.InteropServices.Marshal.Copy(pPixel, rgbValues, 0, 3); return Color.FromArgb(rgbValues[2], rgbValues[1], rgbValues[0]); } Но как мне заставить это работать с изображением с разрешением 1 бит на пиксель? Если я читаю только один байт из указателя, он всегда имеет значение 255, поэтому я предполагаю, что делаю что-то не так.
Пожалуйста, не предлагайте использовать метод System.Drawing.Bitmap.GetPixel, поскольку он работает слишком медленно, а я хочу, чтобы код работал как можно быстрее. Заранее спасибо.

РЕДАКТИРОВАТЬ: Вот код, который работает нормально, на случай, если кому-то это понадобится:
Private Color GetPixelColor (данные BitmapData, int x) { int byteIndex = х/8; int bitIndex = х% 8; IntPtr pFirstPixel = data.Scan0+byteIndex; цвет байта[] = новый байт[1]; System.Runtime.InteropServices.Marshal.Copy(pFirstPixel, цвет, 0, 1); Биты BitArray = новый BitArray (цвет); вернуть биты.Get(bitIndex)? Цвет.Черный : Цвет.Белый; }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»