不迎不送,来去自便,无茶无酒,谈笑随缘

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

正在做一个图像处理的类库,任意图像类型的文件利用类库读入后都存为一个固定的格式,保证程序的可扩展性。在编写的过程中需要将图像显示到屏幕上,由于自己写的将图像所有像素绘制到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]

posted on 2007-10-07 18:22  wude  阅读(253)  评论(0编辑  收藏  举报