Использование кода ниже (вызывается из CLoadPngDlg::OnPaint()
) для просмотра файла PNG (800X50 пикселей), который уже включен в файл ресурсов ( IDB_FULLSCRINFOBAR_OPAQ_TEST ), но, как вы можете видеть на прикрепленном изображении нижняя и правая линии изображения отсутствуют. Я могу подтвердить, что nWidth=800
и nHeight=50
BOOL CLoadPngDlg::ShowPngAt(CDC *dcWnd) {
CGdiPlusBitmapResource *pPngChannel;
UINT nWidth,nHeight;
CRect rectClient;
CBitmap Bitmap, *pOldBitmap;
CDC bitmapDC;
CDC *dialogDC;
pPngChannel = NULL;
pPngChannel = new CGdiPlusBitmapResource;
if (!pPngChannel->Load(IDB_FULLSCRINFOBAR_OPAQ_TEST, _T("PNG"))) {
delete pPngChannel;
return TRUE;
}
GetWindowRect(&rectClient);
// Get size of bitmap.
nWidth = pPngChannel->m_pBitmap->GetWidth();
nHeight = pPngChannel->m_pBitmap->GetHeight();
bitmapDC.CreateCompatibleDC( dcWnd );
Bitmap.CreateCompatibleBitmap(dcWnd, nWidth, nHeight);
pOldBitmap = bitmapDC.SelectObject(&Bitmap);
Gdiplus::Graphics graphics(bitmapDC.GetSafeHdc());
graphics.DrawImage(*pPngChannel, 0, 0);
dcWnd->BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &bitmapDC, 0, 0, SRCCOPY );
bitmapDC.SelectObject( pOldBitmap );
bitmapDC.DeleteDC();
if (pPngChannel != NULL)
delete pPngChannel;
return FALSE;
}
Все просто с прямой копией изображения png внутри клиента область диалога. Итак, в чем здесь проблема?
Редактировать: [решено] Мне нужно было указать размер изображения внутри DrawImage следующим образом. `graphics.DrawImage (* pPngChannel, 0, 0, nWidth, nHeight);