6.1.5 매크로 함수를 이용한 코드 간소화
앞으로 설명할 대부분의 영상 처리 메뉴 이벤트 처리기 추가 시에 소스 6-3과 같은 형식을 따르게 될 것이다. 이 경우 영상 처리 함수를 호출하기 전과 후에 나타나는 영상 클래스 변환 코드들은 거의 항상 동일할 것이다. 그러므로 약간의 프로그래밍 테크닉을 동원하여 소스 코드를 조금이나마 간결하게 바꿔보려고 한다. 일단 이 책에서 사용할 대부분의 영상 처리 메뉴 이벤트 처리기 함수는 아래와 같은 형식을 따를 것이다.
IppByteImage img; IppDibToImage(m_Dib, img); // 영상 처리 함수 호출 IppDib dib; IppImageToDib(img, dib); // 출력창 표시 및 결과 영상 보여주기
위에서 주석으로 표시한 부분을 제외한 영상 변환 관련 코드들은 항상 동일한 형태를 따를 것이다. 이 변환 코드들이 항상 네 줄씩 차지하게 하는 것도 조금은 낭비같이 보인다. 그러므로 #define 구문을 이용하여 각각의 변환 코드를 한 줄의 매크로 형태로 변경하려고 한다. 예를 들어 IppDib 클래스를 IppByteImage 형태로 변환하는 두 줄의 코드를 #define 문으로 정의하면 아래와 같다.
#define CONVERT_DIB_TO_BYTEIMAGE(m_Dib, img) \ IppByteImage img; \ IppDibToImage(m_Dib, img);
위와 같이 정의하면 img 변수 선언 및 IppDibToImage 함수 호출을 한 줄로 표현할 수 있다. 영상 처리 작업 후, 다시 IppByteImage를 IppDib로 변환할 때의 동작도 마찬가지 형태로 #define 문으로 정의할 수 있다. 이처럼 영상 변환 코드를 매크로로 변환하여 다시 작성한 OnImageInverse 함수를 소스 6-4에 나타내었다.
소스 6-4의 OnImageInverse 함수 본문이 앞서 설명한 소스 6-3의 OnImageInverse 함수보다 훨씬 간략하게 변경되었다. 게다가 매크로 이름만 봐도 무슨 동작을 하는지 쉽게 알 수 있을 것이다. 앞으로 나오는 모든 영상 처리 메뉴 이벤트 처리 함수에서는 소스 6-4와 같이 매크로 함수를 이용하여 소스 코드를 구성할 것이다.