2012-06-12 3 views
-1

가능한 중복 :
Convert a image to a monochrome byte array단색 비트 맵

난 단색 비트 맵 이미지를 갖는다. 나는이 같은 이미지를로드 :

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

가 어떻게 1 초는 그 반대의 경우도 마찬가지 흰색 픽셀과 0은 검은 색 픽셀을 나타내는 표현, 또는 이진 배열을 얻을 수 있나요? 배열의 첫 번째 비트는 왼쪽 위의 픽셀이고 array의 마지막 비트는 오른쪽 아래의 픽셀입니다.

가능하면 효율적인 접근 방식이 좋습니다.

+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는 특정 비트 맵의 ​​데이터에서 작동합니다. 잠금을 해제하면 비트 맵을 사용할 수 있습니다. 이것은 링크 된 예제에도 표시됩니다. 완전히 다른 질문을하고 싶습니다. 원시 바이트에서 비트 맵을 만드는 법입니다. –