利用CBitmap将图像快速显示到屏幕上

正在做一个图像处理的类库,任意图像类型的文件利用类库读入后都存为一个固定的格式,保证程序的可扩展性。在编写的过程中需要将图像显示到屏幕上,由于自己写的将图像所有像素绘制到CDC上的程序速度总不是很理想,因此想到了一个很经典的类——CBitmap类。以下是程序中实现显示到场景的方法。

其中pDC为类的成员变量,在拷贝构造函数中已经赋值。IMAGEBITS结构是自定义的图像结构体,包含4个BYTE成员,分别表示红色分量、绿色分量、蓝色分量、保留位。该IMAGEBITS中像素顺序统一为BMP图像文件顺序。

void CWindowGraph::SetImage(int nX,int nY,long nHeight,long nWidth,IMAGEBITS *pstBits)
{
 CBitmap m_Bitmap;
 long nSize=nWidth*nHeight*4;
 BYTE *pbBits=new BYTE[nSize];
 CDC *pMemDC=new CDC;
 long i=0,nCount=nSize/4;
 for (i=0;i<nSize;i+=4)   {   //将Bmp文件序列变换为显示序列
  nCount--;
  pbBits[i]=pstBits[nCount].c_R;
  pbBits[i+1]=pstBits[nCount].c_G;
  pbBits[i+2]=pstBits[nCount].c_B;
  pbBits[i+3]=pstBits[nCount].c_Flag;
  
 }
 m_Bitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
 m_Bitmap.SetBitmapBits(nSize,pbBits);
 pMemDC->CreateCompatibleDC(pDC);
 pMemDC->SelectObject(&m_Bitmap);
 pDC->BitBlt(nX,nY,nWidth,nHeight,pMemDC,0,0,SRCCOPY);
 return ;
}

 图像显示效果如下:

[Image]

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值