Visual Studio的Image Watch扩展(http://goo.gl/TWre0X)允许您在调试时在内存中查看位图。非常有用,但我试图定义一个natvis文件以允许查看DIB或BITMAPINFOHEADER甚至只是BITMAPINFO对象。
以下是我目前的情况:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1"
MenuName="Add to Image Watch"/>
<Type Name="BITMAPINFOHEADER">
<UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1" />
</Type>
<Type Name="BITMAPINFOHEADER">
<Expand>
<Synthetic Name="[type]">
<DisplayString>UINT8</DisplayString>
</Synthetic>
<Synthetic Name="[channels]">
<DisplayString>RGB</DisplayString>
</Synthetic>
<Item Name="[width]">biWidth</Item>
<Item Name="[height]">biHeight</Item>
<Item Name="[data]">(BYTE *)$ + sizeof(BITMAPINFOHEADER) + biClrUsed * 4</Item>
<Item Name="[stride]">biBitCount*3</Item>
</Expand>
</Type>
</AutoVisualizer>
问题显然是&#34; [数据]&#34;部分,试图计算像素数据的偏移量。 $是试图理解natvis文件真正做的事情的弱尝试。
用于图像监视的文档和用户定义类型的一些示例natvis文件(BITMAPINFOHEADER如何属于用户定义,不明白为什么):http://goo.gl/zt2uCh
有没有人有一个natvis文件来处理和显示Image Watch的BITMAPINFOHEADER类型?或者有一个关于如何使这个工作的建议。感谢。
答案 0 :(得分:2)
只需要对你所拥有的东西进行一些调整。
<Type Name="tagBITMAPINFOHEADER">
<AlternativeType Name="BITMAPINFOHEADER"></AlternativeType>
<Expand>
<Synthetic Name="[type]">
<DisplayString Condition="biBitCount==24">UINT8</DisplayString>
<DisplayString Condition="biBitCount==32">UINT8</DisplayString>
<DisplayString Condition="biBitCount==48">UINT16</DisplayString>
</Synthetic>
<Synthetic Name="[channels]">
<DisplayString Condition="biBitCount==32">BGRA</DisplayString>
<DisplayString Condition="biBitCount==24">BGR</DisplayString>
<DisplayString Condition="biBitCount==48">BGR</DisplayString>
</Synthetic>
<Item Name="[width]">biWidth</Item>
<Item Name="[height]">biHeight</Item>
<Item Name="[data]">((BYTE *)this) + sizeof(BITMAPINFOHEADER) + (biClrUsed * 4)</Item>
<Item Name="[stride]">((biBitCount/8)*biWidth)+((4 - (((biBitCount/8)*biWidth)%4))%4)</Item>
</Expand>
</Type>