createTrackbar() 함수의 다섯 번째 인자 onChange에 지정하는 트랙바 콜백 함수에 대해 알아보겠습니다. 트랙바 콜백 함수는 트랙바 위치가 변경될 때 자동으로 호출되는 함수이며, 이 콜백 함수의 형식 TrackbarCallback은 다음과 같이 정의되어 있습니다.
typedef void (*TrackbarCallback)(int pos, void* userdata);
즉, 트랙바 콜백 함수는 int와 void* 타입의 인자 두 개를 가지며, 반환형은 void인 형태로 정의해야 합니다. 트랙바 콜백 함수 첫 번째 인자에는 현재 트랙바의 위치 정보가 전달되고, 두 번째 인자에는 createTrackbar() 함수에서 지정한 사용자 데이터 포인터 값이 전달됩니다. 트랙바 콜백 함수 이름은 사용자 마음대로 지정해도 되지만, 함수의 인자 목록과 반환형은 반드시 정해진 형태를 따라야 합니다. 예를 들어 다음과 같은 형식의 함수는 트랙바 콜백 함수로 사용할 수 있습니다.
void my_trackbar_callback(int pos, void* userdata);
실제로 createTrackbar() 함수를 이용하여 트랙바를 만들고 이용하는 예제 코드를 코드 4-12에 나타냈습니다. 이 예제 프로그램은 image 이름의 새 창에 0부터 16 사이의 값을 선택할 수 있는 트랙바를 생성합니다. 그리고 트랙바 콜백 함수로 등록된 on_level_change() 함수는 사용자가 선택한 트랙바 위치에 16을 곱하여 영상의 전체 픽셀 값으로 설정합니다. 즉, 이 예제 프로그램은 그레이스케일 레벨을 16단계로 보여 줍니다. 코드 4-12에 나타난 소스 코드 파일은 내려받은 예제 파일 중 ch04/trackbar 프로젝트에서 확인할 수 있습니다.