Visual Studio에 다양한 extension 프로그램 중 이미지 버퍼의 내용을 확인하기에 좋은 것을 발견했고
이름은 Image watch
https://visualstudiogallery.msdn.microsoft.com/e682d542-7ef3-402c-b857-bbfba714f78d
문서는 상당히 잘 되어있다.
https://imagewatch.azurewebsites.net/ImageWatchHelp/ImageWatchHelp.htm
아래 코드는 test하기 위해 수정한 것이다.
Visual studio 2013의 경우
C:\Users\XXX\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\3jpgz45l.bxx 와 같은 경로에 설치가 된다.
이 디렉토리에 여러 파일이 있는데 .natvis라는 확장자를 가진 놈들이다.
나의 경우는 아래와 같이 3가지가 있고
ImageWatchOpenCV.natvis
ImageWatchWinMedia.natvis
ImageWatchWinRT.natvis
이 파일 중에 아무거나 하나 열어서 아래 natvis 코드 추가시키고 visual studio 실행하면 MyGenericImage 라는 구조체 데이터 읽어서
이미지 보여준다.
<Type Name="MyGenericImage<*>"> <UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1" /> </Type> <Type Name="MyGenericImage<*>"> <Expand> <Synthetic Name="[type]" Condition='strcmp("unsigned char", "$T1") == 0'> <DisplayString>bool</DisplayString> </Synthetic> <Synthetic Name="[type]" Condition='strcmp("unsigned char", "$T1") == 0'> <DisplayString>UINT8</DisplayString> </Synthetic> <Synthetic Name="[type]" Condition='strcmp("float", "$T1") == 0'> <DisplayString>FLOAT32</DisplayString> </Synthetic> <Item Name="[channels]">nchannels</Item> <Item Name="[width]">ncols</Item> <Item Name="[height]">nrows</Item> <Item Name="[data]">data</Item> <Item Name="[planes]">planes</Item> <Item Name="[stride]">ncols*nchannels*sizeof($T1)</Item> </Expand> </Type>
물론 이렇게만 하면 되는것은 아니다.
문서에 나와 있듯이 MyGenericImage는 소스코드에 추가하면된다.
template <typename T> struct MyGenericImage { unsigned int ncols; // width unsigned int nrows; // height unsigned int nchannels; // 채널 수 unsigned int planes; // Plane 수 T* data; };
당연히 이 이름으로 구조체를 만들 필요는 없다.
또한 원하는 형식으로 구조체 혹은 클래스 구성하고
natvis 파일 수정해주면 된다.
중요한 것은 반드시 image의 width, height, stride 정보는 입력해야한다.
물론 data pointer도 필요하겠지.