1.定义一个BYTE类型的指针,用来指向将要拷贝的位图,
直接使用unsigned char类型也可以,应为BYTE被定义为unsigned char
unsigned char *pBits = NULL;
2.使用GetBitmapBits函数来拷贝位图,位图的宽为src_width,高为src_height,单位为像素。
先给存放位图的指针pBits申请内存,长度大小为“长 * 宽 * 4”,4表示一个像素的占用的字节大小
pBits = new unsigned char[client_w * client_h * 4];
memset(pBits, 0, sizeof(char) * src_width * src_height * 4);
::GetBitmapBits(buf_bitmap, src_width * src_height * 4, pBits); // buf_bitmap为源位图,类型为CBitmap
3.使用CreateBitmap来创建位图,参数可以直接用pBits。如果使用CreateCompatibleBitmap创建,位图参数必须是BITMAP
public void onPaint() { CPaintDC dc(this); // device context for painting CDC memDc; memDc.CreateCompatibleDC(&dc); CBitmap *pOldBit; int nPlanes = memDc.GetDeviceCaps(PLANES); int nBitsPixel = memDc.GetDeviceCaps(BITSPIXEL); m_bitmap.CreateBitmap(src_width, src_height, nPlanes, nBitsPixel, pBits); pOldBit = memDc.SelectObject(&m_bitmap); dc.SetStretchBltMode(MAXSTRETCHBLTMODE); // 设置缩放模式 dc.StretchBlt(m_bmpRect.left, m_bmpRect.top, m_bmpRect.Width(), m_bmpRect.Height(), &memDc, 0, 0, src_width, src_height, SRCCOPY); memDc.SelectObject(pOldBit); m_bitmap.DeleteObject(); }