정렬 알고리즘 중 하나인 선택 정렬[ Selection Sorting ]에 대해 설명드리겠습니다~! [선택 정렬이란??] 정렬 알고리즘 중 하나로 정렬이 되지 않은 데이터들을 선택한 하나의 데이터와 비교하면서 가장 작은 데이터를 앞으로 보내 정렬시키는 알고리즘입니다. [선택 정렬 예시] 5 4 6 3 1 위의 5, 4, 6, 3, 1의 데이터 값들을 가장 작은 숫자가 앞으로 오게 선택 정렬을 시켜보겠습니다. 첫 번째 : 가장 작은 데이터 값인 1을 가장 앞으로 보내고 가장 앞에 있는 데이터 5는 1이 있던 자리로 옮겨줍니다. 1 4 6 3 5 : 첫 번째 칸의 데이터 값을 제외하고 나머지 데이터들 중 가장 작은 값인 3을 두 번째 위치해있는 4와 자리를 바꾸어줍니다. 1 3 6 4 5 세 번째 : 첫 번..
[MFC C++] 이미지 RGB 분리 오늘은 사용자가 원하는 외부 이미지를 출력시키고 그이미지의 RGB를 분리해 각각 R이미지, G이미지, B이미지 3개를 출력시키는 예제를 만들어 보겠습니다. [출력 결과] 좌 상 : 원본 이미지 , 우 상 : R값 좌 하 : G값 , 우 하 : B값 가장 먼저 앞선 예제에서 많이 했던 외부 이미지를 다이얼로그에 출력시키는 방법을 설명드리겠습니다. [소스 코드] (원본 이미지 출력) 변수를 설정해 주기위해 먼저 Dlg.h 파일이 있는 헤더파일에 아래처럼 변수를 추가시켜줍니다. CImage 변수인 m_image CImage는 이미지를 저장시켜줄 수 있는 변수입니다. private 형식으로 추가시켜줍니다. class CRGBexamDlg : public CDialogEx {..
버블 정렬이란?? 버블 정렬은 서로 이웃해있는 데이터들을 비교해 가장 큰 데이터 값을 가장 뒤로 보내는 정렬 방식입니다~! [버블 정렬 예시] 처음 상태 5 1 10 6 4 첫 번째 처리 : 1 5 10 6 4 1 5 10 6 4 1 5 6 10 4 1 5 6 4 10 두번째 처리 : 1 5 6 4 10 1 5 6 4 10 1 5 4 6 10 세번째 처리 : 1 5 4 6 10 1 4 5 6 10 네번째 처리 : 1 4 5 6 10 그림을 보시면 배열의 항목이 총 5개입니다. 첫 번째 비교를 해줄 때 인접한 항목을 서로 교환하는 작업은 총 4번이 이루어집니다. 그러면 마지막에 가장 큰 값(10)이 위치하게 됩니다. 두 번째 단계에서는 5번째 항목은 이미 가장 큰 수가 들어가 있으니깐 비교할 필요가 없습니..
MFC 이미지 회전시키기(45도) 오늘은 MFC를 가지고 이미지를 원하는 각도로 회전시키는 예제를 만들어 보겠습니다~! [결과 사진] 위의 결과는 왼쪽으로 45도 회전시킨 사진입니다. [코드 설명] 먼저 앞선 예제들처럼 원본 이미지를 출력시키기 위해 헤더파일의 Dlg.h파일에 가셔서 CImage 변수 m_image를 추가시켜 주시고 두 번째로 회전된 이미지를 저장하고 출력시키기 위해 변수 m_two_image를 하나 더 선언해 줍니다. m_image에는 원본 이미지 m_two_image에는 회전된 이미지를 저장시켜줄 것입니다. private: CImage m_image; CImage m_two_image; cs 소스코드 Dlg.cpp 파일에 OnInitDialog() 함수가 있는 곳으로 이동해줍니다. 아..
[MFC 이미지 색 반전 (Invert color image)] 오늘은 원본 이미지를 출력 후 원본 이미지의 색상을 반전시켜서 바로 옆에 색상을 반전시킨 이미지를 출력시키는 예제를 만들어보겠습니다. [결과 사진] 왼쪽은 원본사진이고 오른쪽은 색상을 반전시킨 사진입니다. 구현은 색상 최댓값인 255에서 현재 픽셀 값을 빼고 다시 그 픽셀에 뺀 값을 저장하는 식으로 구현했습니다. [코드 설명] 먼저 변수를 만들어주기 위해 Dlg.h 헤더 파일에 가줍니다. 원본 이미지를 저장할 변수와 색이 반전된 이미지를 저장할 변수를 추가시켜줍니다. 원본 이미지를 저장할 변수 -> m_image 색이 반전된 이미지를 저장할 변수 -> invert_image // CInvertImageDlg 대화 상자 class CInver..
[MFC 픽셀값 사용해서 이미지 확대 시키기] Dlg.h파일에 가서 CImage 변수 한 개를 만들어줍니다. // CImagePixelControlDlg 대화 상자 class CImagePixelControlDlg : public CDialogEx { private: CImage m_image; cs 다음 Dlg.cpp 파일 OnInitDialog()에가서 m_image에 외부 사진을 로드시켜줍니다. 사진 파일은 소스파일이 있는 폴더에 넣어주시면 됩니다. BOOL CImagePixelControlDlg::OnInitDialog() { CDialogEx::OnInitDialog(); SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다. SetIcon(m_hIcon, FALSE); // ..
이번에는 이미지를 왼쪽으로 90도 회전시키는 실습을 해보겠습니다. 먼저 앞서 많이 진행했던 이미지 출력을 시켜보겠습니다. Dlg.h파일에 가서 CImage m_image 변수를 추가시켜줍니다. // CRotatExamDlg 대화 상자 class CRotatExamDlg : public CDialogEx { CImage m_image; // 생성입니다. cs 그다음 Dlg.cpp 파일에 가서 아래와 같이 OnInitDialog()에는 m_image에 로드시켜주는 코드를 추가시켜주고 OnPaint()에는 CPaintDC를 if문 밖으로 빼주시고 CDialogEx::OnPaint();를 주석 처리해줍니다. 그리고 m_image를 Draw시키는 코드를 추가시켜줍니다. 마지막으로 원하는 이미지를 다운받아 test..
[MFC 히스토그램 그리기] 오늘은 히스토그램을 출력시키는 예제를 만들어보겠습니다. [결과 사진] 우선 히스토그램의 출력 결과 사진입니다. RGB 중 R값만 히스토그램 출력한 그림입니다. [코드 설명] 히스토그램을 그리기 전에 간단하게 외부 이미지 파일 출력하는 방법에 대해 설명드리겠습니다. 먼저 헤더파일의 Dlg.h 파일에 가셔서 CImage변수로 m_image를 추가해줍니다. 외부 이미지를 저장시켜줄 변수입니다. // CHistogramExamDlg 대화 상자 class CHistogramExamDlg : public CDialogEx { private: CImage m_image; // 생성입니다. public: CHistogramExamDlg(CWnd* pParent = nullptr); // 표..