본문 바로가기

Windows/Visual Studio

[VisualStudio] Image watch

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&lt;*&gt;">     <UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1" /> </Type>  <Type Name="MyGenericImage&lt;*&gt;">     <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도 필요하겠지.