그러면 3차 회선 보간법을 이용한 영상의 크기 변환을 C/C++ 함수로 만들어보자. 3차 회선 보간법의 구현 함수의 이름은 IppResizeCubic을 사용하기로 하자. IppResizeCubic 함수에서는 내부적으로 cubic_interpolation이라는 함수를 사용할 것이다. 그러므로 다음 두 개의 함수 선언을 IppGeometry.h 파일에 추가하자.
void IppResizeCubic(IppByteImage& imgSrc, IppByteImage& imgDst, int nw, int nh); double cubic_interpolation(double v1, double v2, double v3, double v4, double d);
IppResizeCubic 함수의 인자 구성은 앞에서 살펴보았던 IppResizeNearest 또는 IppResizeBilinear 함수와 동일하다. cubic_interpolation 함수는 그림 9-13에서 설명한 4개의 픽셀 값을 이용하여 결정된 값 v를 반환하는 함수이며, 함수 인자로 사용되는 변수 명은 그림 9-13에 표기된 기호와 동일하다. cubic_interpolation 함수는 IppResizeCubic 함수 내에서 모두 5번 호출된다. IppResizeCubic과 cubic_interpolation 함수의 전체 구현은 소스 9-6에 나타내었다.
소스 9-6의 IppResizeCubic 함수 내부의 정수형 변수 x1~x4, y1~y4는 3차 회선 보간법에서 사용할 16개의 점들의 가로, 세로 좌표를 저장할 변수이다. 이 좌표들을 지정할 때, 영상의 크기를 벗어난 위치의 좌표를 저장하지 않도록 신경을 써주어야 한다. 앞에서 언급한 것과 같이 cubic_interpolation 함수를 4번 호출하여 v1~v4의 값을 결정하는 것을 볼 수 있는데, 이 값들은 그림 9-11에서 설명한 삼각형에 해당하는 곳에서의 픽셀 값의 추정치이다. 그리고 v1~v4 값과 실숫값 q를 이용하여 cubic_interpolation 함수를 한 번 더 호출하여 최종적으로 보간된 값 v를 얻어냄을 볼 수 있다. 실숫값 v는 반올림하여 정수형으로 변환하고, 그 값을 결과 영상의 픽셀 값으로 지정한다.