- 1. BOOL TranslateBitmapSize(
- 2. IN HDC hCurScreemDC, //当前屏幕DC,可通过GetDC获得
- 3. IN HBITMAP hBmpSrc, //原BITMAP句柄
- 4. IN int nSrcWidth, //原BITMAP的宽度
- 5. IN int nSrcHeight, //原BITMAP的高度
- 6. OUT HBITMAP &hBmpDst, //改变大小后的BITMAP的句柄
- 7. IN int nDstWidth, //改变大小后的BITMAP的宽度
- 8. IN int nDstHeight //改变大小后的BITMAP的高度
- 9. )
- 10. {
- 11. if (hBmpSrc == NULL || hCurScreemDC == NULL)
- 12. {
- 13. return FALSE;
- 14. }
- 15. if (hBmpDst != NULL)
- 16. {
- 17. DeleteObject(hBmpDst);
- 18. }
- 19. HDC hOldSrcDC = NULL;
- 20. HDC hOldDstDC = NULL;
- 21. HDC hSrcDC = CreateCompatibleDC(hCurScreemDC);
- 22. HDC hDstDC = CreateCompatibleDC(hCurScreemDC);
- 23. hBmpDst = CreateCompatibleBitmap(hCurScreemDC,nDstWidth,nDstHeight);
- 24. hOldSrcDC = (HDC)SelectObject(hSrcDC,hBmpSrc);
- 25. hOldDstDC = (HDC)SelectObject(hDstDC,hBmpDst);
- 26. StretchBlt(hDstDC,0,0,nDstWidth,nDstHeight,hSrcDC,0,0,nSrcWidth,nSrcHeight,SRCCOPY);
- 27. SelectObject(hSrcDC,hOldSrcDC);
- 28. SelectObject(hDstDC,hOldDstDC);
- 29. DeleteObject(hSrcDC);
- 30. DeleteObject(hDstDC);
- 31. return TRUE;
- 32. }
原理:
创建两个与当前屏幕DC兼容的DC,创建一个与当前屏幕兼容的位图句柄,把两个位图句柄分别选入两个兼容DC,然后通过StretchBlt函数进行DC拷贝,目的位图句柄就获得了改变后的位图。