[MFC] ListControl 에 image 나열 혹은 삽입하기

이미지들을 쭉 나열해야할 필요성이 있을 때 쓰기 좋.....은진 모르겠지만

나중에 또 쓸일이 있을 듯 하여 기록!!
 
우선 멤버 변수로 CListCtrl m_lcImageList;를 선언한 상태임 

TCHAR    szPath[_MAX_PATH];
int nIndex = 0;
int nIconSize = 64;  // 원본 이미지 크기가 제각각이어서 사이즈 크기 정함

static CImageList cImgList;

// 이미지 리스트 초기화
if (cImgList == NULL)
{
    cImgList.Create(nIconSize, nIconSize, ILC_COLOR16, 2, 2);
}
else
{
    m_lcImageList.DeleteAllItems();

    while (cImgList.GetImageCount())
        cImgList.Remove(0);
}

CBitmap bmp;
CImage image;
CImage copyImg; // 이미지를 늘려 저장할 변수
CImage img;
copyImg.Create(nIconSize, nIconSize, 16);  //카피 이미지 설정 값

 // 이미지 로드
bResult = image.Load(szPath);

// 읽기 성공한 경우
if (bResult == S_OK)
{
       // 이미지를 특정 크기로 늘리거나 줄이기
        BOOL bResult = image.StretchBlt(copyImg.GetDC(), 0, 0, nIconSize, nIconSize, SRCCOPY);

        // 세이브할 이미지 이름
        _stprintf(szPath, 생략 );
        // 이미지 세이브 : 현재 바로 입력하면 이미지가 뜨지않아 저장 후 로드한 이미지로 사용중
        copyImg.Save(szPath);
        Sleep(100);
        img.Load(szPath);
        bmp.Attach(img);

        cImgList.Add(&bmp, RGB(0, 0, 0)); // 두번째 인자는 마스크로 검정색으로 해야 이미지 주변이 하얗게 나온다.

        strItem.Format(_T("Pattern %d"), i);

        int a = cImgList.GetImageCount();
        int b = m_lcImageList.GetItemCount();

        m_lcImageList.InsertItem(i, strItem, i);

        copyImg.ReleaseDC();
        bmp.Detach();
    }
}
m_lcImageList.SetImageList(&cImgList, LVSIL_NORMAL);

아직 중간에 파일을 저장해서 다시 불러와야하는 부분 왜 그런지 모르겠지만

잘 동작하니 나중에 파해쳐보도록 하자!

댓글

이 블로그의 인기 게시물

[Python] 파이썬에서 Opencv를 이용해 웹캠 영상 읽어오기 및 저장

[MFC] 에디트 컨트롤에 계속 문자열 추가하기(List log)

[Python] OpenCv를 이용하여 마우스 위치 가져오기