【问题标题】:How to have the changes stay?如何保持更改?
【发布时间】:2013-03-12 18:21:07
【问题描述】:

我有 MainScreen.cpp

void MainScreen::Show(D2DResources* pD2DResources)
{
    HRESULT hr = S_OK;

    ID2D1Bitmap* pBitmap=pD2DResources->GetpCurrentScreen();

    hr = pD2DResources->LoadBitmapFromFile(
        pD2DResources->GetpRT(),
        pD2DResources->GetpIWICIF(),
        L".\\Images\\MainScreen.jpg",
        0,
        0,
        &pBitmap
        );

    if(SUCCEEDED(hr))pD2DResources->DrawScreen();
}

有时会像这样调用 MainScreen::Show() 函数

MainScreen->Show(&d2DResources);

但是,似乎当 pD2DResources 在 MainScreen::Show() 函数中调用 DrawScreen() 时,存储在 &pBitmap 中的任何内容都没有保存。实际上,我得到了一个未处理的异常,当它发生时,应该收到 pBitmap 的值的 pCurrentScreen 是 0x00000000。

我该怎么办?

【问题讨论】:

  • 还是那一小段代码有问题?
  • 我做了一些改动,现在可以了。

标签: c++ class function pointers direct2d


【解决方案1】:

如您所知,LoadBitmapFromFile 函数失败
所以你应该检查 LoadBitmapFromFile 函数的参数

但是,您为什么将 pD2DResources->GetpCurrentScreen() 分配给 pBitmap?
下一行,pBitmap 将再次分配 LoadBitmapFromFile 函数。

另外,如果 MainScreen 的 Show 函数调用每一帧,那效率不高。
因为您不必每帧都加载位图。
并且应该释放d2d位图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多