1

我对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 当此方法返回时,包含指向新位图渲染目标的指针的地址。此参数未初始化传递。

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

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

BOOL GetBitmap(
   CD2DBitmap& bitmap
);

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

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

4

1 回答 1

0

我遇到了同样的问题。查看 CD2DBitmap 实现,没有没有参数的构造函数,并且只有父 CRenderTarget* 作为参数,但它受到保护,因此无法从外部使用。因此,显然唯一的方法是使用 3 个公共构造函数之一,它们仅从现有资源(从句柄、资源 id 或文件路径)中创建位图。

就我而言,作为一种解决方法,因为我的意图是用一个新的 (GetBitmap) 替换这个 bitbap,我从存储在我的资源中的 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);
于 2015-11-24T10:29:33.110 回答