CDrawImage 类

CDrawImage 类是一个帮助程序类,用于管理视频呈现器筛选器的绘图。 所有绘图操作都使用 GDI 执行。 此类不提供使用 DirectDraw 进行呈现的任何支持。 该 CDrawImage 类要求拥有筛选器也使用 CBaseWindow 类,该类管理视频窗口。 构造 CDrawImage 函数使用指向 CBaseWindow 对象的指针。

下图显示了在自定义视频呈现器筛选器中使用此类的首选方法。

custom video renderer using cdrawimage

若要使用此类,请执行以下操作:

Allocators

上图中显示的筛选器使用自定义分配器类 CImageAllocator。 此分配器使用 GDI CreateDIBSection 函数在共享内存中创建 DIB。 分配器创建的示例为 CImageSample 对象。

如果筛选器拥有连接的分配器,则保证媒体示例为 CImageSample 对象。 在这种情况下, CDrawImage 对象可以使用 BitBlt 或 StretchBlt 优化绘图。 否则,它必须使用较慢的 SetDIBitsToDeviceStretchDIBits 函数。 较快的选项由 CDrawImage::FastRender 方法实现, CDrawImage::SlowRender 方法的较慢选项。 (尽管名称如此,但在 SlowRender 中,你可能会看到性能大,尤其是在较新的硬件上。)

调色板

如果 FastRender 方法用于绘制,并且图像已淡化,则筛选器需要管理调色板,如下所示:

  • CImageSample 类包含调色板版本号,存储在 DIBDATA 结构中。 分配器创建示例时初始化该值。
  • CDrawImage 类还包含在创建时初始化的调色板版本号。
  • 每当媒体类型更改为新的疏通格式时,请调用 CDrawImage::IncrementPaletteVersion。 此方法递增 CDrawImage 对象的调色板版本号。 如果筛选器使用 CImagePalette 类来管理调色板信息,则只要媒体类型发生更改,即可调用 CImagePalette::P reparePalettePreparePalette 方法仅在必要时递增调色板版本。
  • FastRender 方法将 CDrawImage 调色板版本与示例的调色板版本进行比较。 如果示例的版本号落后 于 CDrawImage 版本号, 则 FastRender 方法调用 CDrawImage::UpdateColourTableUpdateColourTable 方法使用 GDI SetDIBColorTable 函数在设备上下文中设置颜色表。 此外,示例中的调色板版本将更新为当前版本号。
  • 如果引脚重新连接,筛选器应调用 CDrawImage::ResetPaletteVersion 以重置调色板版本。 在引脚重新连接时,分配器会重新分配所有样本。
受保护的成员变量 说明
m_bStretch 指示是否必须拉伸视频图像以适应目标窗口。
m_bUsingImageAllocator 指示引脚连接的分配器是否为 CImageAllocator 对象。
m_EndSample 指定最近示例的停止时间。
m_hdc 对拥有窗口的设备上下文的句柄。
m_MemoryDC 对拥有窗口的内存设备上下文的句柄。
m_PaletteVersion 用于跟踪调色板更改时间。
m_pBaseWindow 指向拥有 CBaseWindow 对象的指针。
m_pMediaType 指向当前媒体类型的指针。
m_SourceRect 指定用于绘制的源矩形。
m_StartSample 指定最新示例的开始时间。
m_TargetRect 指定用于绘制的目标矩形。
受保护的方法 说明
DisplaySampleTimes 在视频图像的顶部绘制媒体示例的时间戳。
FastRender 使用 BitBltStretchBlt 函数绘制视频图像。
SetStretchMode 计算是否必须拉伸视频图像。
SlowRender 使用 SetDIBitsToDeviceStretchDIBits 函数绘制视频图像。
UpdateColourTable 使用新调色板更新颜色表。
公共方法 说明
CDrawImage 构造函数方法。
DrawImage 在视频窗口中绘制视频帧。
DrawVideoImageHere 将图像从媒体示例绘制到指定的设备上下文。
GetPaletteVersion 检索调色板版本。
GetSourceRect 检索当前源矩形。
GetTargetRect 检索当前目标矩形。
IncrementPaletteVersion 递增调色板版本。
NotifyAllocator CDrawImage通知对象连接分配器是否为 CImageAllocator 对象。
NotifyEndDraw 不支持。
NotifyMediaType 通知当前媒体类型的对象。
NotifyStartDraw 不支持。
ResetPaletteVersion 重置调色板版本。
ScaleSourceRect 缩放指定的源矩形(如果本机视频大小与媒体类型格式之间存在差异)。 虚拟。
SetDrawContext 设置用于绘制的设备上下文。
SetSourceRect 设置源矩形。
SetTargetRect 设置目标矩形。
UsingImageAllocator 指示当前分配器是否为 CImageAllocator 对象。

要求

要求 Value
标头
Winutil.h (包括 Streams.h)

Strmbase.lib (零售版) ;
Strmbasd.lib (调试生成)