У меня есть растровое изображение большого размера (2000 x 2000). Мне нужно сжать это растровое изображение до небольшого размера (150 x 150). я написал для него код, но он не работает. Может ли кто-нибудь помочь в поиске проблемы? Проблема в том, что растровое изображение адресата просто пустое. Я выбираю неправильный DC? Я убедился, что и источник, и адресат верны. После выполнения bitblt мне нужно сделать еще кое-что для целевого растрового изображения?Сжатие растрового изображения до требуемого размера
BOOL ReSizeBitmap(CBitmap *pBitmap, CBitmap *pNewBitmap)
{
// Get new bitmap size
BITMAP bmOld;
if(!pBitmap->GetBitmap(&bmOld))
{
return FALSE;
}
CRect rcPrev(0, 0, bmOld.bmWidth, bmOld.bmHeight);
int newWidth = 150;
int newHeight = 150;
if(newWidth < 1 || newHeight < 1)
{
::SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
BOOL bResult = FALSE;
try
{
CDC dcDest;
CDC dcSource;
dcSource.CreateCompatibleDC(NULL);
dcDest.CreateCompatibleDC(NULL);
CBitmap* pSourceOld = dcSource.SelectObject(pBitmap);
CBitmap* pDestold = dcDest.SelectObject(pNewBitmap);
if(!pNewBitmap->CreateCompatibleBitmap(
&dcDest, newWidth, newHeight))
{
return FALSE;
}
int oldStretchMode = dcDest.SetStretchBltMode(HALFTONE);
bResult = dcDest.StretchBlt(
0, 0, 150, 150,
&dcSource, 0, 0, bmOld.bmWidth, bmOld.bmHeight,
SRCCOPY);
dcDest.SetStretchBltMode(oldStretchMode);
dcSource.SelectObject(pSourceOld);
dcDest.SelectObject(pDestold);
bResult = TRUE;
}
catch(CResourceException* /*e*/)
{
}
return bResult;
}
есть ли вопрос где-то? – Glen
И ваш вопрос? –
спасибо за указание! – coolcake