关闭

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

标签: byte图像处理扩展
1892人阅读 评论(0) 收藏 举报

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:149038次
    • 积分:2242
    • 等级:
    • 排名:第17421名
    • 原创:67篇
    • 转载:6篇
    • 译文:0篇
    • 评论:95条
    最新评论