2013-03-09 2 views
1

이미지를 0과 1의 다차원 배열로 변환하고 싶습니다. 이미지가 될 것이다 :이미지를 0과 1의 다차원 배열로 변환하는 방법이 있습니까?

enter image description here

난 '블랙'1로서 저장되고 및 '흰색'이 0 어레이로서 저장되고 함께 배열로 이미지를 저장하는 wan't. 배열은 8 행 6 열이됩니다.

int[,] imgArray = new int[8,6]; 

C#에서이를 수행 할 수있는 방법이 있습니까?

+0

이미지가 어떤 형식을? (비트 맵?) –

+0

이미지가 'png'형식입니다. 그러나 비트 맵이 아닌 비트 맵 형식을 사용할 수 있습니다. 나는 아래의 코드를 @Lukazoid에 의해 포토샵에서 6 * 8 비트 맵을 직접 만들어 테스트했다. 그러나 imgArray의 모든 것이 0으로 삽입 되었기 때문에 검정색이 1로 보이지 않았다. – Sujal

답변

3

당신이 Bitmap를 사용하는 경우,이 같은 배열을 채울 수 있습니다 :

var bitmap = new Bitmap(@"C:\MyImage.png"); 
var imgArray = new int[bitmap.Width,bitmap.Height]; 
var blackArgb = Color.Black.ToArgb(); 
var whiteArgb = Color.White.ToArgb(); 
for (var i = 0; i < bitmap.Width; ++i) 
{ 
    for (var j = 0; j < bitmap.Height; ++j) 
    { 
     var pixelCol = bitmap.GetPixel(i, j); 
     if (pixelCol.ToArgb() == blackArgb) 
     { 
      imgArray[i, j] = 1; 
     } 
     else if (pixelCol.ToArgb() == whiteArgb) 
     { 
      imgArray[i, j] = 0; 
     } 
     else 
      throw new InvalidOperationException("Pixel color must be black or white"); 
    } 
} 
+0

코드를 테스트 해본 결과, System.Diagnostics.Debug.WriteLine ("요소 ({0}, {1}) = {2}", i, j, imgArray [i, j]); 출력에 imgArray를 표시합니다. 출력 표시한다 'System.InvalidOperationException'와 배열의 함유량이 0의 요소 (0,0) = 0 요소 (0,1) 0 요소 (0,2) = 0 = 요소를 표시한다 (0 , 3) = 0 요소 (0,4) = 0 .... – Sujal

+0

잘못된 연산 예외 메시지가 내 코드의 예외 메시지와 일치합니까? 나는 또한 내가 가지고있는 몇 가지 코딩 오류를 수정했습니다. – Lukazoid

+0

@Sujal 새롭게 업데이트 된 답변을 시도해보십시오. Color 인스턴스 대신 ARGB 값을 비교해야합니다. MSPaint에서 PNG 이미지로 테스트하고 테스트했습니다. – Lukazoid

관련 문제