2012-06-12 3 views
-1

Можно создать дубликат:
Convert a image to a monochrome byte arrayмонохромные Растровые в двоичный массив в C#

У меня есть монохромный растровое изображение. Я загрузить изображение, как это:

Image image = Image.FromFile("myMonoChromeImage.bmp"); 

Как я могу получить двоичный массив, где 1s представляют белые пиксели и 0s представляют черные пиксели, или наоборот? (Первый бит в массиве - это верхний левый пиксель, а последний бит в массиве - правый правый пиксель)

Если возможно, будет оценен эффективный подход.

+0

@Panagiotis Kanavos Этот вопрос задан для массива байтов. Извините, но я не знаю, что каждый байт представляет в монохромном растровом изображении (8 пикселей?). –

+1

это вопрос/ответ, который вы ищете: http://stackoverflow.com/questions/2593768/convert-a-image-to-a-monochrome-byte-array. –

ответ

0

Вы можете использовать LockBits, чтобы получить доступ к данным растрового изображения и скопировать значения непосредственно из массива растровых изображений. GetPixel по существу блокирует и разблокирует битмап каждый раз, поэтому он не эффективен.

Вы можете извлечь данные в массив байтов, а затем проверить значения RGBA, чтобы увидеть, если они белые (255,255,255,255) или черный (0,0,0,255)

Образец BitmapData класс показывает, как это сделать , В вашем случае код будет примерно таким:

 Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); 
     BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat); 

     // Get the address of the first line. 
     IntPtr ptr = bmpData.Scan0; 

     // Declare an array to hold the bytes of the bitmap. 
     int bytes = Math.Abs(bmpData.Stride) * bmp.Height; 
     byte[] rgbValues = new byte[bytes]; 

     // Copy the RGB values into the array. 
     System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); 

     // Unlock the bits. 
     bmp.UnlockBits(bmpData); 
+0

Как преобразовать его обратно в растровое изображение, используя массив байтов, информацию о формате пикселя, ширину и высоту? –

+0

Если вы хотите задать новый вопрос, вы должны сделать именно это. Почти никто не замечает комментарии к старым вопросам. Также невозможно дать правильный ответ, почтовый индекс или примеры в комментарии –

+0

Кроме того, нет необходимости конвертировать что-либо. BitmapData работает с данными конкретного битмапа. Как только вы разблокируете его, можно использовать растровые изображения. Это также показано в связанном примере. Я подозреваю, что вы хотите задать совершенно другой вопрос, то есть, как создать растровое изображение из необработанных байтов? –

Смежные вопросы