有一个很好的Visual Studio扩展Image Watch。
它可以在RAM中使用任意地址,并使用@mem
运算符将其内容显示为图像。
@mem(address, type, channels, width, height, stride)
:将原始内存解释为像素,从address
(UINT64
)开始,使用频道type
(请参阅Pixel Formats),编号为{{ 1}}(channels
),UINT32
(width
),UINT32
(height
)和UINT32
(stride
) 。示例:UINT32
根据help page,它可以显示几种复杂的像素格式,其中包括BGR,NV12和YV12。
可选地,格式字符串可以与像素格式相关联。它指定了每个渲染通道的语义:
RG,UV
RGB,BGR,YUV
RGBA,BGRA
...
还支持许多特殊的YUV格式。在这种情况下,格式字符串还定义了数据布局。
NV12(两个平面:一个Y平面,一个打包的UV平面,在两个维度上二次采样)
YV12(三个平面:一个Y平面,每个包装一个U和V平面,两个维度都经过二次采样)
但是,我不清楚如何让Image Watch以@mem(myimg.data, UINT8, 1, 320, 240, 320)
和NV12
格式显示YV12
格式的图片。
帮助页面不包含太多信息。
我设法显示灰色单通道图像,指定@mem
作为通道类型。我还可以正确显示频道类型为UINT8
的BGR图像和3个频道:UINT8
。这在文档中有描述,但并不明显。
我尝试了多种频道和格式字符串的组合,有或没有引号:@mem(pBGR, UINT8, 3, 640, 480, 640*3)
,@mem(ptr, NV12, 3, 640, 480, 640*3)
,@mem(ptr, "NV12", 1, 640, 480, 640*3)
@mem(ptr, UINT8NV12, 3, 640, 480, 640*3)
等 - 没有运气。我只看到带有@mem(ptr, NV12UINT8, 1, 640, 480, 640*3)
字样的灰色矩形。
与[invalid]
相同。