ASSOC함수의 사용

안녕하세요 에스이랩의 막내 김종현입니다. 처음 포스팅은 정신이 없어서 소개도 없이 지나갔는데요. IDL이 주는 아니지만, 공부 많이해서 더 많은 정보를 나눌 수 있도록 노력하겠습니다. 그럼 시작하겠습니다!!

ASSOC함수는 파일을 읽어서 이를 배열이나 구조체로 읽어오는 함수입니다.  기본적으로 동일한 작업은 READU같은 함수를 이용하여 사용하였지만,  이 함수를 통해서는 좀 더 다양한 작업을 할 수 있습니다. 이번 내용에서는 간단하게 BMP파일을 ASSOC함수로 불러오는 작업을 해보고자합니다. BMP파일의 경우 READ_BMP라는 함수가 존재하기 때문에 따로 ASSOC가 필요없지만, 이 예제를 통해서 함수의 이용에 더 익숙해질 수 있을 것입니다.

READ_BMP를 이용하면 바로 나오는 것이지만,  ASSOC함수의 사용에 대해 간단히 볼 수 있습니다. 첫번째 변수 u는 openr을 이용해서 연 파일의 주소값입니다. 또한 BMP파일의 데이터 순서에 맞춰서 R, G, B 값을 나누고 가로와 세로의 픽셀수로 배열을 정의했습니다. 마지막에 54는 비트맵 FILEHEADER와 INFOHEADER의 크기입니다. offset으로 건너 뛰는 것이지요. 지금 Koala는 [3,1024,768]크기의 배열로 보이지만, 실제로는 파일의 바이트데이터의 주소를 받아서 이것을 [3,1024,768]크기의 배열로 나눈 것입니다. 그렇기 때문에 free_lun,u 이후에 Koala에서 데이터를 받으려고 하면 다음과 같은 오류가 나게 됩니다.

위의 사용처럼 Binary file을 읽는데 있어서 ASSOC함수는 많은 편리함을 주고 있습니다. 파일을 읽는 과정이 필요하다면 한번 이 함수를 이용해보는 것은 어떠신지요?

덧>위의 방식대로 하셨다면, 트루컬러로 나온 이미지의 색이 뭔가 많이 이상하실텐데요. 이미 아시는 분도 있겠지만 이것은 BMP파일의 특징 때문으로 헤더뒤부터 있는 자료의 시작값이 가장 왼쪽아래 픽셀의 B컬러이기 때문이지요. 주어진 배열의 색상표는 BGR순서이기 때문에 [0,*,*]의 데이터와 [2,*,*]의 데이터를 서로 바꿔주신다면 정상적인 이미지가 출력될 겁니다.