이번에는 CString 형에서 char*형으로 변환하는 방법을 알아보자. 고 생각했는데,

 

다른 블로거께서 딱히 설명 할 필요 없을정도로 아주 자세히 설명해놓으셔서 따로 부가적인 코멘트가 없어도 될듯하다.

 

 

1. 일반 문자열의 형변환 

CString strImagePath = "Normal Method";

char *szLoadImagePath = new char[strImagePath.GetLength() + 1];


sprintf(szLoadImagePath, "%s", strImagePath.GetBuffer());

...

delete []szLoadImagePath;

 

 

2. 경로를 입력해주는 경우의 형변환

CString strImagePath = "C:\\ProgramFiles\\Image\\image.bmp";

char *szLoadImagePath = new char[strImagePath.GetLength() + 1];


sprintf(szLoadImagePath, "%s", strImagePath.GetBuffer());

...

delete []szLoadImagePath;

 

 

3.  함수로부터 경로를 넘겨받는 경우의 형변환

CString strImagePath = m_img.GetImagePath();

strImagePath += "image.bmp";

char szLoadImagePath[256];

wcstombs(szLoadImagePath, (LPCTSTR)strImagePath, 256);

 

일반적인 CString 문자열을 char* 형으로 형변환하고자 한다면 1번 방법을 사용하시면 됩니다. 개발자 코드에서

경로를 직접 입력해줄 경우에는 2번 방법을 사용하시면 됩니다. 하지만, 별도의 함수로부터 경로를 넘겨받을 경우에는

\를 Escape Sequence로 인식하기 때문에 경로를 올바르게 인식하지 않습니다. 그렇다고 일일이 \을 \\으로 변경할 수도

없으므로 3번 방법을 사용하시면 됩니다. wcstombs 함수는 UNICODE 문자열(WCS, Wide Character Set)을 ASCII 문자열(MBCS,

Multy Byte Character Set)로 변환시켜주는 함수 입니다. 이렇게 하면 \을 Escape Sequence로 인식하는 문제를 피할 수 있습니다.

 하지만 3번 방법도 경로에 한글이 포함되어 있을 경우 올바르게 인식하지 않습니다. 비로소 4번 방법을 사용하였을 경우 1,2,3번 

방법에서 나타났던 문제를 모두 해결할 수 있습니다. 



4. 경로에 한글이 포함되어 있을 경우의 형변환

CString strImagePAth = m_img.GetImagePath();

strImagePath += "image.bmp";

char szLoadImagePath[256];


WideCharToMultiByte(CP_ACP, 0, strImagePath.GetBuffer(), -1, szLoadImagePath, 256, NULL, NULL);

 

 

참고로 저같은 경우에는 한글 Windows 8.1 OS를 사용 중인데, 경로중에 한글이 들어가게 되어있다. 그래서 4번을 활용하여 경로찾는 문제를 해결 할 수 있었다.

 

 

 

참고 : http://jsgreatnom.tistory.com/65

 

2014/10/31 - [[ Topics ]/Visual Studio] - CString to int, int to CString 변환법

 

2014/05/01 - [[ Topics ]/Visual Studio] - CString 에서 경로, 파일명, 확장자를 구분하여 출력하는법

 

2014/04/08 - [[ Topics ]/C/C++] - 문자타입간의 데이터 복사방법(wchar_t, char*, LPCTSTR)

 

 

Posted by Tommy™
,

파일 입출력에 있어서 해당 이벤트가 끝나고 파일이 존재하는 폴더창을 여는 방법이 궁금해졌다.

 

그래서 찾아 본 결과,

 

어떤 블로거분께서 아주 친절히 설명해놓으셨다.

 

바로 ShellExecute 함수를 사용해서 하는 방법이었는데, 매우 유용할듯하다.

 

아래는 블로거분이 작성해놓은걸 살짝 긁어 온 글이다.

 

 

 

 

ShellExecute 는 윈도우의 '실행' 창에서 내리는 명령과 비슷한 작업을 한다.

 

 

 ShellExecute(NULL, _T("open"), sPath, NULL, NULL, SW_SHOW);

 

폴더가 열림

sPath 에는 폴더 경로가 들어감

 

 

 ShellExecute(NULL, _T("open"), _T("explorer"), _T("/select,") + sFilePath, NULL, SW_SHOW);

 

폴더가 열리고, 파일이 선택됨

sFilePath 에는 파일 경로가 들어감

 

 

 

 

참고 : http://purelab.net/zbxe/?mid=guruin&listStyle=gallery&document_srl=86579

 

Posted by Tommy™
,

때에 따라서는 Dialog 창을 갑자기 종료시켜야하는 경우가 발생한다.

 

이러한 경우 여러 해결방법이 있겠지만, 그중에서 직접 찾아보고 시도해봤던, 그리고 추천하는 방법을 작성해본다.

 

OnClose()

-> 정말 프로세스 도중에 창을 닫아버린다. 따라서 메모리릭 발생

 

Exit(0)

-> 피차일반, 비정상적인 종료라면서 마찬가지로 오류 또는 메모리릭 발생

 

::PostQuitMessage(WM_QUIT)

-> 아래와 같은 경고창이 발생한다. 이말인 즉슨, 안전한 종료방법은 아니라는듯하다.

"경고: 대화 상자를 만들지 못했으므로 응용 프로그램이 예기치 않게 종료됩니다.
경고: 대화 상자에서 MFC 컨트롤을 사용하는 경우 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS를 수행할 수 없습니다."

 

::SendMessage(this->m_hWnd, WM_CLOSE, NULL, NULL) 혹은 ::SendMessage(GetSafeHwnd(), WM_CLOSE, NULL, NULL)

-> 메모리릭이 발생하지 않는다. 그리고 아무런 경고 엾이 정상적으로 종료가 된다.

 

참고 : http://egloos.zum.com/CharlesM/v/1279955

 

Posted by Tommy™
,

PreTranslateMessage() 함수 생성

 

     if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
          return TRUE;

 

추가하면 완료.

 

말그대로, 이벤트를 먼저 처리하는 구문이 바로 PreTranslateMessage() 함수인데, 여기서 키 입력 파라미터인 wParam 에서 VK_RETURN (엔터키) 와 VK_ESCAPE (Esc키)가 눌러졌을때, 걍 True로 리턴하라는 뜻. 

 

참고사이트: http://lafirr.tistory.com/20

Posted by Tommy™
,

 

 

 

 

 

 

우연히 알게 된 펠리칸 카메라.

 

요즘 새로운것들에 대해 이리 저리 관심을 가지다가 2011년에 처음 나왔던 펠리칸 카메라(Pelican camera)에 대해 급 관심을 가지게 되었다.

 

이 카메라는 작은 카메라들을 일정한 간격으로 배열 (Camera array), 이를 활용하여 영상을 합성 및 조작하여 다양한 형태의 영상 결과물을 만들어 내는데, 기존의 포터블 기기의 단일 카메라(Mono camera) 에서는 활용 할 수 없었던 다양한 기능들을 이 카메라에서는 구현이 가능하다. 이유인 즉슨, 기존의 Mono camera 에서는 1개의 시점(Perspective)을 가질수 밖에 없기 때문인데, 이 카메라는 다양한 perspecitve를 가지고 있기에 얻을수 있는 광학(Optical)적 정보가 훨씬 풍부하다. 그 결과, Pelican Imaging 사는 다음과 같은 기능들을 구현했다. 요약하자면..

 

- 기능 1. 고 해상도(High resolution) 영상 추출

 2013년 SIGGRAPH Asia 2013 버전 영상을 보면, 저 해상도(Low resolution) 영상을 정합 및 Super resolution 알고리즘을 활용하여 보간, 결과적으로 다양한 시점의 영상을 고 해상도 영상으로 제작 한 듯 하다.

 

- 기능 2. 깊이 정보 (Depth map) 추출

자세한 알고리즘 및 방법은 모르지만, 개인적인 생각은 Stereo vision에서 사용하는 영상간의 시차(parallax)를 이용한 방법이 가장 유력한듯 하다. 아무튼, 다양한 위치의 카메라들을 활용, 이들의 다양한 위치의 영상 정보를 활용하여 parallax를 추출, 이를 활용하여 최종 depthmap을 추출해 낸 듯 하다.

 

- 기능 3. 원하는 곳의 초점 조절 (Synthetic refocus)

Lytro 카메라가 출시되었을때, 가장 놀라웠던 점은 카메라 초점(Focus)을 따로 잡지 않고, 마구잡이로 찍은 후, 원하는 곳에 focus를 맞출 수 있다는 점이었다. 그리고 Pelican Camera도 해당 기능이 가능하다. 나도 공부하고 있는 입장이라 명쾌하게 서술 할 수 없지만, Lytro camera 는 plenoptic camera 타입 인걸로 알고 있는데, 특별한 lens array를 센서 앞에 두고, 영상을 촬영(Capture), 이를 영상 합성하여 결과물을 만들어 낸것으로 알고있다. 이 Lens array가 다양한 perspective를 제공하기때문에 가능한걸로 알고 있는데, Pelican Camera 역시 비슷한 개념으로 접근하지 않았나.. 유추해 본다.

 

- 기능 4. 다양한 시점 정보 (Synthetic view points or different perspectives)

이 또한 서로 다른 위치의 카메라 배열을 이용 했기에 가능한 결과물이다. 각각의 카메라는 다른 perspective를 가지고 있기때문에, 이를 활용하여 영상을 합성 및 정합, 결과적으로 3D view를 활용 할 수가 있다.

 

이러한 기능들은 1장의 촬영(Capture) 영상으로 가능한 결과물들인데, 가장 놀라운 점은 이 카메라의 크기가 정말 작다는것이다. 기존의 portable 기기에서 쓰는 카메라는 다양한 렌즈가 들어가있기 때문에, 카메라의 두께가 꽤나 두껍다. 흔히 말하는 카툭튀(카메라가 툭 튀어나왔다?) 현상인데, 해당 카메라를 쓰면 이러한 문제를 해결할 수 있는듯하다.

 

해당 기술을 설명한 논문도 친절히 인터넷에 있으니, 읽고 공부해봐야겠다.

 

아무튼 정말 기대가 되는 기기임에는 틀림없다. 무튼 앞으로의 모바일 카메라 분야에서 또다른 혁신을 몰고 올 차세대 카메라 라고 감히 기대해본다.

 

 

이미지 및 정보 참조 : www.pelicanimaging.com

Youtube : https://youtu.be/twDneAffZe4

논문 : http://dl.acm.org/citation.cfm?id=2508390

 

 

Posted by Tommy™
,