MFC显示彩色拷贝位图的方法

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(); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值