IWICBitmapLock :: GetStride方法始终返回相同的值

时间:2015-02-05 13:54:29

标签: c++ bitmap wic

我有这段代码,它在运行时执行了几次:

// Restore the bitmap from the copy
IWICBitmapLock *pLock = NULL;
UINT cbStride = 0;
hr = m_pWICBitmapCopy->GetSize(&uiWidth,&uiHeight);
WICRect rcLock = { 0, 0, uiWidth, uiHeight };
hr = m_pWICBitmapCopy->Lock(&rcLock, WICBitmapLockRead, &pLock);
hr = pLock->GetDataPointer(&cbBufferSize, &pv);
hr = pLock->GetStride(&cbStride);
m_pWICBitmap->Release();
hr = m_pWICImagingFactory->CreateBitmapFromMemory(uiWidth,uiHeight,GUID_WICPixelFormat32bppPBGRA,cbStride,cbBufferSize,pv,&m_pWICBitmap);
hr = pLock->Release();

uiWidthuiHeight总是不同,初始值为3264和2448.第二次可能是例如778和246。 但方法pLock->GetStride(&cbStride)总是返回相同的步幅值(在我的情况下为13056)。这会导致CreateBitmapFromMemory()方法创建损坏的位图。其他变量根据位图尺寸正确更改。看起来pLock缓存了某个地方的步幅值。

MSDN written中,步幅值特定于IWICBitmapLock,而不是位图。但是,我每次都发布了pLock。那么这种行为可能是什么原因呢?

我可以使用的第二种方法是这样的,但我想了解上面的代码有什么问题。

m_pWICBitmap->Release();
m_pWICImagingFactory->CreateBitmapFromSource(m_pWICBitmapCopy, WICBitmapCacheOnDemand, &m_pWICBitmap);

0 个答案:

没有答案