为什么用StretchDIBits函数后,回收new出来的堆区,会出现异常呢
为什么用StretchDIBits函数后,回收new出来的堆区,会出现错误呢?
各位大侠,我碰见一个问题,百思不得其解,代码如下:
BITMAPINFO bi;
memset(&bi, 0, sizeof(bi));
memcpy(&(bi.bmiHeader), &bih, sizeof(BITMAPINFOHEADER));
int file_size = nWidth * nHeight * 3;
BYTE *pBmpBuf = new BYTE[file_size];
if (pBmpBuf != NULL)
{
memcpy(pBmpBuf, pRGB, file_size);
::StretchDIBits(m_memDCDst.GetSafeHdc(), 0, 0, iRectW, iRectH, 0, 0, nWidth, nHeight, pBmpBuf, &bi, DIB_RGB_COLORS, SRCCOPY);
}
delete[] pBmpBuf;
pBmpBuf = NULL;
iRectW = iRectH = 200,每次当nWidath = nHeight = 80可以,但当nWidath = nHeight = 82,或是等于74,就不行了。执行完StretchDIBits()后,到delete[] pBmpBuf时会报错,如图:
nWidath 和 nHeight是算法从图像中截取的目标头像尺寸,为什么80就可以,其他的就不行?求各位大神指点。
------解决思路----------------------
nWidth 应该是4的倍数.
各位大侠,我碰见一个问题,百思不得其解,代码如下:
BITMAPINFO bi;
memset(&bi, 0, sizeof(bi));
memcpy(&(bi.bmiHeader), &bih, sizeof(BITMAPINFOHEADER));
int file_size = nWidth * nHeight * 3;
BYTE *pBmpBuf = new BYTE[file_size];
if (pBmpBuf != NULL)
{
memcpy(pBmpBuf, pRGB, file_size);
::StretchDIBits(m_memDCDst.GetSafeHdc(), 0, 0, iRectW, iRectH, 0, 0, nWidth, nHeight, pBmpBuf, &bi, DIB_RGB_COLORS, SRCCOPY);
}
delete[] pBmpBuf;
pBmpBuf = NULL;
iRectW = iRectH = 200,每次当nWidath = nHeight = 80可以,但当nWidath = nHeight = 82,或是等于74,就不行了。执行完StretchDIBits()后,到delete[] pBmpBuf时会报错,如图:
nWidath 和 nHeight是算法从图像中截取的目标头像尺寸,为什么80就可以,其他的就不行?求各位大神指点。
------解决思路----------------------
nWidth 应该是4的倍数.