소스 4-17에서 IppFloatImage 타입을 IppDib 타입으로 변환하는 함수에 대해서만 잠깐 살펴보자. IppFloatImage 타입에서 픽셀 값은 float 자료형을 사용하기 때문에 unsigned char 자료형으로 픽셀 값을 표현하는 IppDib 타입으로 변환 시 memcpy 함수를 사용할 수 없다. 그러므로 for 루프 안에서 각각의 픽셀 위치를 참조하여 static_cast 연산자로 픽셀 값을 변환하였다. 이때 0보다 작거나 255보다 큰 값은 모두 0 또는 255로 설정되도록 limit 함수도 함께 사용하였다.
지금까지 IppDib와 IppImage 클래스 간의 상호 변환 함수 구현까지 알아보았다. 이제 실제 영상 처리 알고리즘을 구현할 때 이 변환 함수들을 어떻게 사용할 것인지 알아보도록 하자. 아래 코드 블록을 살펴보자.
Ippdib dib1; dib1.Load("C:\\test.bmp"); // (1) IppByteImage img1; IppDibToImage(dib1, img1); // (2) // img1을 이용하여 영상 처리 수행 IppDib dib2; IppImageToDib(img1, dib2); // (3)
위에서 (1)번 코드가 수행되면 dib1은 C:\test.bmp 파일의 비트맵 영상을 가지게 된다. 이후 (2)번 코드까지 수행되면 img1은 dib1과 동일한 영상을 가지게 된다. 이후부터는 img1을 이용하여 영상 처리를 수행하고, 그 결과를 다시 img1에 저장하도록 코드를 작성하면 된다. 영상 처리 결과를 화면에 나타내려면 img1을 IppDib 형태로 변환해야 한다. 그러므로 (3)번처럼 새로운 IppDib 타입의 변수 dib2를 선언하여 img1을 dib2로 변환하였다. 이러한 코드 전개는 향후 이 책에서 본격적인 영상 처리 알고리즘을 설명하는 6장부터 자주 사용될 것이다.