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

原创 2007年10月07日 18:22:00

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

相关文章推荐

CBitmap对象直接加载外部图像的方法

在初始化CBitmap对象时,常用Cbitmap::LoadBitmap,即如下两种: BOOL LoadBitmap(LPCTSTR lpszRecourceName); BOOL Lo...

[ATL/WTL]_[中级]_[保存CBitmap到文件-保存屏幕内容到文件]

场景: 1. 在做图片处理时,比如放大后或加特效后需要保存CBitmap(HBITMAP)到文件. 2.截取屏幕内容到文件时. 3.不需要加入第3方库时....

原始图像转换Cbitmap

  • 2015年05月15日 12:59
  • 1.81MB
  • 下载

要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列

要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列...

android 屏幕截图时,如何更改截图内容,将两个bitmap合并一起显示图像

android 屏幕截图时,如何更改截图内容,将两个bitmap合并一起显示图像

利用VB捕捉并保存屏幕图像

  • 2011年11月01日 10:35
  • 59KB
  • 下载

利用ffmpeg压缩屏幕图像为avi(录屏、压制)

看了雷神关于ffmpeg方面的文章,结合自己最近做的一个基与cdc抓屏、vfw压制的录屏工具,就想改为采用ffmpeg来压制avi。 关于如何用ffmpeg压制视频相信大家都有一些见解,这里写这篇文章...

裸机S3C6410显示控制器(4)- 显示图像到屏幕

裸机S3C6410显示控制器(4)- 显示图像到屏幕 分类: [项目]S3C6410移植LINUX2012-11-08 22:41 186人阅读 评论(0) 收藏 举报    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用CBitmap将图像快速显示到屏幕上
举报原因:
原因补充:

(最多只允许输入30个字)