IppImage 클래스의 대입 연산자 재정의와 Convert 함수의 전체 소스 코드는 소스 4-12에 나타내었다. Convert 멤버 함수에서 사용된 limit 함수에 대해서는 조금 뒤에서 설명할 것이다.
template<typename T> IppImage<T>& IppImage<T>::operator=(const IppImage<T>& img) { if (this == &img) return *this; CreateImage(img.width, img.height); memcpy(pixels[0], img.pixels[0], sizeof(T) * width * height); return *this; } template<typename T> template<typename U> void IppImage<T>::Convert(const IppImage<U>& img, bool use_limit) { CreateImage(img.GetWidth(), img.GetHeight()); int size = GetSize(); T* p1 = GetPixels(); U* p2 = img.GetPixels(); if (use_limit) for (int i = 0; i < size; i++) p1[i] = static_cast<T>(limit(p2[i])); else for (int i = 0; i < size; i++) p1[i] = static_cast<T>(p2[i]); }
IppImage 클래스가 가지고 있는 멤버 변수 정보는 아래 함수들을 이용하여 참조할 수 있다. IsValid 함수는 실제 영상 데이터를 가지고 있는지 검사하는 함수이다.
• int GetWidth() const { return width; } • int GetHeight() const { return height; } • int GetSize() const { return width * height; } • bool IsValid() const { return (pixels != NULL); }
이 외에도 IppImage 클래스의 멤버는 아니지만 영상 처리 알고리즘 구현 시 유용하게 사용할 전역 함수 limit를 만들어 사용할 것이다. 이 전역 함수는 다양한 자료형을 지원하기 위해 템플릿 함수로 정의하였으며 IppImage.h 파일에 인라인 함수로 정의되어 있다.
• template<typename T> inline T limit(const T& value);
limit 함수는 인자로 넘어온 값을 0~255 사이의 범위로 한정시켜 주는 함수이다. 만약 value 값이 255보다 크면 255를 반환하고, 0보다 작으면 0을 반환한다.