2014-11-22 2 views
0

나는 딜레마에 빠져있다. 비트 맵을 바이트 배열로 변환해야하는데, 나는 그것을 할 필요가있는 특정 방법이 필요하다. 그리고 시연을 위해서 이러한 비트 맵은 단색이다. 이것은 내가해야 할 일이다. ##3x3 픽셀 .bmp를 3x3 바이트 배열로 변환하는 방법은 무엇입니까?

@ 0

@@@

는 # 255의 RGB 값, 255, 255의 핵심이라고 할 수 있으며 @ 0, 0의 RGB 값인

@ #

나는 그 전환이 필요하다. 이런 일에 erted :

0, 0, 0

0, 255, 255

0, 255, 0

이 가능 할 수 있을까요?

+2

예, 가능하다고 생각합니다. 너 뭐 해봤 니? –

+0

Ive는 다른 stackoverflow 대답을 사용하기 전에 이것을 시도했지만 문제는 바이트 응답으로 전체 파일을 출력한다는 것이 었습니다. 색상과 같은 보이는 정보 만 원했습니다. – Mavain

+0

비트 맵에는 모든 픽셀이 있습니다. 무엇이 문제일까요 ?? 파일에 데이터가 있습니까? 어떤 형식? 시도해 봤어? 'Bitmap bmp = new Bitmap ("yourImageFile");으로 시작하십시오. for (int x .. color (int x ..) color c = bmp.GetPixel (x, y); if (c == Color.White) .. ' – TaW

답변

1

먼저 바이트를 얻을 :

ImageConverter

public static byte[] ImageToByte(Image img) 
{ 
    ImageConverter converter = new ImageConverter(); 
    return (byte[])converter.ConvertTo(img, typeof(byte[])); 
} 

또는 메모리 스트림

public static byte[] ImageToByte2(Image img) 
{ 
    byte[] byteArray = new byte[0]; 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
     stream.Close(); 

     byteArray = stream.ToArray(); 
    } 
    return byteArray; 
} 

그런 다음 원하는 다차원 배열 변환합니다.

byte[][] multi = new byte[height][]; 
for (int y = 0; y < height; ++y) 
{ 
    multi[y] = new byte[width]; 
    // Do optional translation of the byte into your own format here 
    // For purpose of illustration, here is a straight copy 
    Array.Copy(bitmapBytes, width * y, multi[y], 0, width); 
} 
+0

전체 비트 맵이 아닌 각 픽셀의 색과 같은 시각적 정보의 바이트를 가져와야합니다. – Mavain

+0

다음을 읽으십시오. http : //en.wikipedia.org/wiki/BMP_file_format 파일 헤더를 구성하는 첫 번째 X 바이트를 건너 뜁니다. 예를 들어 (width * y) 대신 (headerSize + (width * y))가됩니다. 이미지가 이미 파일의 특정 부분을 제거했기 때문에 그 부분을 제거해야 할 수도 있습니다. –

+0

비트 맵에 .GetPixel 함수가 있음을 알았습니다. 그래도 고맙습니다. :) – Mavain

관련 문제