奇怪的CBitmapRenderTarget :: GetBitmap API - Direct2D MFC

时间:2015-06-04 20:04:57

标签: mfc direct2

对于directd2d接口,我完全被MFC包装器搞糊涂了。例如,请查看以下内容: -

BOOL CreateCompatibleRenderTarget(
   CBitmapRenderTarget& bitmapTarget,
   CD2DSizeF sizeDesired = CD2DSizeF(0.,
   0.),
   CD2DSizeU sizePixelDesired = CD2DSizeU(0,
   0),
   D2D1_PIXEL_FORMAT* desiredFormat = NULL,
   D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options = D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE
);
  

bitmapTarget当此方法返回时,包含a的地址   指向新位图渲染目标的指针。传递此参数   初始化。

我对应该传递给函数的内容感到十分困惑。与文档相反,它接收对象而不是Directd2d IDL中未初始化的指针。并且必须初始化对象。

现在可以看出CBitmapRenderTarget是使用默认contstructor创建的对象。但是,这不适用于CBitmapRenderTarget的GetBimap成员,该成员也遵循文档中相同的模式: -

BOOL GetBitmap(
   CD2DBitmap& bitmap
);
  

bitmap此方法返回时,包含此有效位图   渲染目标。该位图可用于绘图操作。

但是CD2DBitmap没有默认的ctor,所以我无法首先创建对象。问题是如何正确调用CBitmapRenderTarget API的GetBitmap。如何创建未初始化的CD2DBitmap对象???

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。看看CD2DBitmap的实现,没有没有参数的构造函数,还有一个只有父CRenderTarget *和一个参数的构造函数,但它受到保护,所以不能从外部使用。所以显然唯一的方法是使用3个公共构造函数中的一个,它们只从现有资源(来自句柄,资源ID或文件路径)创建Bitmap。

在我的情况下,作为一种解决方法,因为我的意图是用新的替换这个bitbap(GetBitmap),我从存储在我的资源上的PNG文件中创建了Bitamp:

    CD2DBitmap bitmap(GetRenderTarget(), (UINT)IDB_LOGO_PETIT, _T("PNG"));
    m_pTraceRenderTarget->GetBitmap(bitmap);

但您可以使用任何其他CD2DBitmap构造函数:

CD2DBitmap(CRenderTarget* pParentTarget, UINT uiResID, LPCTSTR lpszType = NULL, CD2DSizeU sizeDest = CD2DSizeU(0, 0), BOOL bAutoDestroy = TRUE);
CD2DBitmap(CRenderTarget* pParentTarget, LPCTSTR lpszPath, CD2DSizeU sizeDest = CD2DSizeU(0, 0), BOOL bAutoDestroy = TRUE);
CD2DBitmap(CRenderTarget* pParentTarget, HBITMAP hbmpSrc, CD2DSizeU sizeDest = CD2DSizeU(0, 0), BOOL bAutoDestroy = TRUE);
相关问题