如何将位图从文件加载到样本缓冲区

时间:2014-04-28 08:11:10

标签: c++ directshow

我正在尝试将文本添加到我从directshow过滤器获得的位图中。首先我尝试使用gdiplus但是没有用。所以现在我只需要调用一个操作位图的.Net程序。

问题是我不知道如何将文件中的位图重新加载到directshow中的样本缓冲区。

这是我的代码:

Bitmap bmp(640, 480, 2560, 139273, newBuffer);
//save
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
WCHAR* file = L"D:\\TEMP\\sample.bmp";
bmp.Save(file, &pngClsid, NULL);

std::string command("D:\\yourcontrol\\bitmapDraw.exe D:\\TEMP\\sample.bmp \"test text\" D:\\yourcontrol\\out.bmp");
//manipulate
system(command.c_str());

//load
Bitmap bmp2(D:\\yourcontrol\\out.bmp");

如何将位图从文件转发到样本?

1 个答案:

答案 0 :(得分:0)

媒体样本是滤波器之间协议的一部分,在特定引脚连接上。您通常不会加载媒体样本,除非您运行过滤器并且您正在其输出引脚上传送数据。

在后一种情况下,您有媒体类型的媒体样本,您可以分配和初始化媒体样本,您的任务很简单:加载图像,访问其数据,memcpy进入媒体样本缓冲区,确保媒体type匹配图像格式(否则你负责转换)。完成后,您就像通常那样提供媒体示例(PushSource Filter是Windows SDK上最接近的示例)。