지난시간엔 Median Filter를 사용해 이미지의 필터링을 진행하였다.
이번엔 ComboBox 기능을 통해 Mask(Kernel) Size를 선택하고 필터링을 진행할 수 있게 개선해본다.
얼추 이런식으로 디자인을 마쳤다. ComboBox의 유형에는 세 가지가 있다.
1. Simple: 모든 항목이 펼쳐져있고, 선택한 항목을 Edit할 수 있다.
2. Dropdown: 화살표를 눌러 항목을 펼쳐 보아야 하며 Edit할 수 있다.
3. Drop List: 화살표를 눌러 항목을 펼쳐 보아야 하며 선택한 항목은 수정할 수 없다.
지금은 굳이 수정 기능이 들어갈 필요가 없으니 Drop List를 선택했다.
이어서 콤보 박스에 값을 추가해준다. 지금은 3 x 3과 5 x 5 마스크 중에 선택할 수 있게 했다.
// 콤보박스에 값 추가
CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO_MSG);
pCombo->AddString(_T("3x3"));
pCombo->AddString(_T("5x5"));
// 콤보 박스의 기본 선택 항목을 설정
m_Combo.SetCurSel(0); // 0번 인덱스 아이템을 기본으로 선택
m_Combo는 멤버 변수로서 CCombo type이다. 기존의 내용은 크게 수정할 것은 없고, Combo Box를 선택했을 때 filterSize만 변경되도록 수정한다.
void CImageDlg::OnCbnSelchangeComboMsg()
{
int curSel = m_Combo.GetCurSel(); // 선택된 콤보 박스 아이템 인덱스를 가져옴
switch (curSel)
{
case 0: // "3x3" 선택
filterSize = 3;
break;
case 1: // "5x5" 선택
filterSize = 5;
break;
default:
break;
}
UpdateData(FALSE);
}
Combo Box의 자세한 사용법은 이쪽을 참고하면 될 것 같다.
https://foxlime.tistory.com/99
마지막으로 정리해보자.