使用C++代码直接在IMFMediaBuffer上画一个矩形

Posted

技术标签:

【中文标题】使用C++代码直接在IMFMediaBuffer上画一个矩形【英文标题】:Directly draw a rectangle on IMFMediaBuffer using C++ code 【发布时间】:2012-10-17 05:49:08 【问题描述】:

目前,我尝试从Media Foundation Transform 修改样本。我倾向于实现以下目标

在 C++ 代码中执行人脸检测。 将检测到的人脸坐标传回 C# 代码。 让 C# 在屏幕上绘制检测到的人脸矩形。

我完成了第 1 步。但是,我被第 2 步所吸引。我面临着类似的问题:How to get feedback from MediaCapture API in Windows 8。我找不到方法,让我的 C++ MFT 代码与 C# 代码交谈。

我正在考虑另一种解决方法。 使用 C++ 代码直接在IMFMediaBuffer 上绘制一个矩形。

但是,我没有看到 Microsoft 提供此类 API 来执行此操作。如果没有,我可以使用的正确方法是什么?

【问题讨论】:

你能在那个缓冲区中设置像素颜色吗? 是的。我可以在缓冲区中设置像素值。但是,通过将像素 1 填充 1 来绘制形状(矩形、圆形、...)会很繁琐。 也许并不乏味,但如果您以前从未这样做过,则需要一些思考。 【参考方案1】:

如果您可以设置像素颜色,那么用循环绘制一个矩形应该相当简单。

for (int y = top; y <= bottom; y++)
    for (int x = left; x <= right; x++)
        pixels[y * width + x] = color; // pseudocode

仅绘制矩形的边框只是 4 个单独的循环。

画圆的最简单方法:

for (int y = -r; y <= r; y++)
    for (int x = -r; x <= r; x++)
        if (x * x + y * y < r * r)
            pixels[(center.y + y) * width + center.x + x] = color; // pseudocode

【讨论】:

以上是关于使用C++代码直接在IMFMediaBuffer上画一个矩形的主要内容,如果未能解决你的问题,请参考以下文章

我还应该合并 IMFMediaBuffer 对象吗?

使用android studio查看c或者c++代码是,无法在某个类或者方法上直接跳转到声明或者定义的地方.

Windows 媒体基础 2D 缓冲区

C++ Linux:OpenPrinter 等价物

怎样从C++代码直接訪问android framework层的WifiService

支持从 C++ 代码读取或写入 HIVE 的驱动程序