【问题标题】:Direct2d CreateBitmapfromWICBitmap giving assert error within ATLDirect2d CreateBitmapfromWICBitmap 在 ATL 中给出断言错误
【发布时间】:2012-12-08 08:53:54
【问题描述】:

我有一个简单的函数,它加载一个 Png 文件并将其作为 ID2D1Bitmap 返回。但是当它试图调用 CreateBitmapfromWicBitmap 函数时,它会给出一个调试断言错误。有趣的是,我首先在一个单独的项目中创建了一个 imageload 函数,它在那里工作得很好。这两个函数的代码相同,而第二个函数却报错。

这是错误代码:

ID2D1Bitmap* Wnd::LoadPng(LPCWSTR Path) {
    CComPtr<IWICBitmapDecoder> pDecoder;
    CComPtr<IWICBitmapFrameDecode> pFrame;
    CComPtr<ID2D1Bitmap> pBit;
    CComPtr<IWICFormatConverter> pConv;
    HRESULT Hr;

    Hr = m_pWICFactory->CreateDecoderFromFilename(Path,NULL,GENERIC_READ,WICDecodeMetadataCacheOnDemand,&pDecoder);

    if (SUCCEEDED(Hr)) {
        Hr = m_pWICFactory->CreateFormatConverter(&pConv);
    }

    if (SUCCEEDED(Hr)) {
        Hr = pDecoder->GetFrame(0,&pFrame);
    }

    if (SUCCEEDED(Hr)) {
        Hr = pConv->Initialize(pFrame,GUID_WICPixelFormat32bppPBGRA,WICBitmapDitherTypeNone,0,0.f,WICBitmapPaletteTypeCustom);
    }

    if (SUCCEEDED(Hr)) {
        Hr = m_pRT->CreateBitmapFromWicBitmap(pConv,0,&pBit);
    }
    return pBit;
}

错误发生在 atlcomcli.h 函数 _NoAddRefReleaseOnCComPtr 的第 182 行。

我仔细检查了所有头文件和库,它们在两个项目中都是相同的(在第二个项目中有一些额外的头文件)。

这是有效的代码:

        CComPtr<IWICFormatConverter> Conv;
        m_pWICFactory->CreateFormatConverter(&Conv);
        CComPtr<IWICBitmapFrameDecode> Frame;
        m_pDecoder->GetFrame(0,&Frame);
        Frame->GetSize(&W,&H);
        Conv->Initialize(Frame,GUID_WICPixelFormat32bppPBGRA,WICBitmapDitherTypeNone,0,0.f,WICBitmapPaletteTypeCustom);
        CComPtr<ID2D1Bitmap> Bit;
        Hr = m_pRT->CreateBitmapFromWicBitmap(Conv,0,&Bit);
        m_pBitmap.push_back(Bit);

这里预定义了BitmapDecoder,但是和第一个sn-p中的完全一样。

------------------- 已修复 --------------- -------------

我第三次忘记为我的渲染目标调用 init 函数。

【问题讨论】:

    标签: c++ visual-studio-2010 com atl direct2d


    【解决方案1】:

    断言失败警告您正在尝试通过CComPtr 模板“使用”NULL 接口指针。您应该在调用堆栈上查找您所在的代码的确切行,以及哪个变量包含您希望为非 NULL 的 NULL 指针。或者,只需使用调试器单步执行您的代码。

    【讨论】:

    • 哇...我第三次忘记为我的渲染目标调用 init 函数了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2019-04-19
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多