有一个不错的 Visual Studio 扩展Image Watch。
它可以在 RAM 中获取任意地址,并将其内容显示为带有@mem
操作符的图像。
@mem(address, type, channels, width, height, stride)
:将原始内存解释为像素,从address
(UINT64
) 开始,具有通道type
(请参阅像素格式)、channels
(UINT32
)、width
(UINT32
)、height
(UINT32
) 和stride
(UINT32
) 的数量。例子:@mem(myimg.data, UINT8, 1, 320, 240, 320)
根据帮助页面,它可以显示几种复杂的像素格式,BGR、NV12和YV12就是其中之一。
可选地,格式字符串可以与像素格式相关联。它指定了每个渲染通道的语义:
RG、紫外线
RGB、BGR、YUV
RGBA、BGRA
...
还支持许多特殊的 YUV 格式。在这种情况下,格式字符串还定义了数据布局。
NV12(两个平面:一个 Y 平面,一个压缩 UV 平面,在两个维度上都被 2 次采样)
YV12(三个平面:一个 Y 平面,一个压缩 U 和 V 平面,在两个维度上都被 2 次采样)
但是,我不清楚如何使 Image Watch 使用运算符显示图像NV12
和YV12
格式@mem
。
帮助页面不包含太多信息。
我设法显示灰色单通道图像,指定UINT8
为通道类型。我还可以正确显示通道类型 =UINT8
和 3 个通道的 BGR 图像:@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]
。
与YV12
.