`
yuyututuw
  • 浏览: 27846 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用位图句柄,将其保存为BMP文件

阅读更多

使用位图句柄,将其保存为BMP文件
2011年05月02日
        要通过与设备无关的位图句柄来将位图写入BMP文件,首先要了解BMP文件的结构,BMP文件由3到4个部分组成,第一部分是文件头(BITMAPFILEHEADER),再后面是文件信息头部分(BITMAPINFOHEADER),再往后如果还有的话就是颜色表,颜色表是可以有,也可以没有的,再往后就是图像数据部分了。
  void SaveBmpFile(HBITMAP hBitmap)
  {
  //选择保存路径
  CFileDialog cfd(FALSE,NULL,NULL,6UL,"*.bmp");
  if(cfd.DoModal()==IDOK)
  {
  CString fileName=cfd.GetPathName();
  int nPos = fileName.Find(".");
  if(nPos == -1)
  fileName += ".bmp";
  CFile file(fileName,CFile::modeCreate|CFile::modeWrite);
  //获取位图对象
  CBitmap *pBmp = CBitmap::FromHandle(hBitmap);
  BITMAP bitmap;
  pBmp->GetObject(sizeof(bitmap),&bitmap);
  //设置位图文件头
  BITMAPFILEHEADER bmpHeader;
  BITMAPINFOHEADER bmpInfo;
  DWORD fileSize;
  //获取文件长度
  CDC dc;
  dc.CreateDCA("DISPLAY",NULL,NULL,NULL);
  dc.SelectObject(pBmp);
  //计算
  fileSize = sizeof(bmpHeader) + sizeof(bmpInfo) + bitmap.bmWidth * bitmap.bmHeight * bitmap.bmBitsPixel / 8;
  //设置文件头结构
  ::memset(&bmpHeader,0,sizeof(BITMAPFILEHEADER));
  bmpHeader.bfType = MAKEWORD('B','M');
  bmpHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
  bmpHeader.bfSize = fileSize;
  //设置位图信息头结构
  bmpInfo.biBitCount = bitmap.bmBitsPixel;
  bmpInfo.biCompression = BI_RGB;
  bmpInfo.biPlanes = 1;
  bmpInfo.biWidth = bitmap.bmWidth;
  bmpInfo.biHeight = bitmap.bmHeight;
  bmpInfo.biSize = sizeof(bmpInfo);
  //将位图写入文件
  file.Write(&bmpHeader,sizeof(bmpHeader));
  file.Write(&bmpInfo,sizeof(bmpInfo));
  //写入图像数据部分
  BYTE *pBuffer = new BYTE[fileSize - bmpHeader.bfOffBits];
  ::memset(pBuffer,0,fileSize-bmpHeader.bfOffBits);
  GetDIBits(dc.m_hDC,hBitmap,0,bitmap.bmHeight,pBuffer,(LPBITMAPINFO)&bmpInfo,DIB_RGB_COLORS);    //获取图像数据
  file.Write(pBuffer,fileSize-bmpHeader.bfOffBits);       //写入图像数据
  file.Flush();
  file.Close();
  delete[] pBuffer;
  }
  }
分享到:
评论

相关推荐

    保存HBITMAP句柄资源到BMP图象文件

    DELPHI过程:保存HBITMAP句柄资源到BMP图象文件,支持1、4、8、16、24、32位色深.

    bmp位图写入到文件中

    得到桌面dc ,转化成位图句柄,保存到bmp文件中

    将HBITMAP存为BMP文件

    获得HBITMAP句柄后(比如读取一个位图文件或由程序动态生成),保存为bmp图片。支持1、4、8、16、24、32位。代码清晰,注释完整,值得参考。

    易语言位图操作类模块

    易语言位图操作类模块源码,位图操作类模块,通过句柄取图标,取文件图标,初始化颜色表,CaptureDC,GetBitsAddress,GetBitsSize,BytesPerLine,Create,SetPixelColor,GetBitmapInfoAddress,GetWidth,GetHeight,WIDTHBYTES...

    ColorBmpTo_OneBitBmp实现1/2/4/8/16/24/32位图转换

    //位图中每象素所占字节数为1/2/4/8/16/24/32 WORD wBitCount = wBitCountIN; //定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数 DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, ...

    贪吃蛇 c语言代码 实现。

    //snake图像位图句柄 HBITMAP bufferBMP = NULL; //缓冲位图句柄 HBITMAP endBMP = NULL; //游戏终结图像内存句柄 HBITMAP hbmpWall = NULL; //墙位图句柄 HBITMAP hbmpScore = NULL; //分数板位图句柄 HBRUSH ...

    VC运用OPENGL加载BMP纹理图的实现方法汇总

    首先获取位图句柄: HBITMAP hBmp = (HBITMAP) ::LoadImage (AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0,LR_CREATEDIBSECTION); 然后根据位图句柄得到位图信息: BITMAP BM; ::...

    MFC 编程基础 VC++

    1.10、BMP位图显示方法 1.11、截取Cstring中某一部分_例 1.12、格式化CString数据 1.13、CString数据写入到文件 1.14、读取数据文件到Cstring对象 1.15、绘图 1.16、使按钮/菜单项失效和生效 1.17、在EDIT控件中追加...

    GDI+ SDK参考中文版

    将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半透明的...

    abc.rar_ABC_vc-read-bmp

    VC实现读取BMP图像,是用文档句柄来实现,支持多种位图的读取。

    GDI/GDI+ SDK 参考手册 中文资料

    将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半透明的...

    GDI+帮助文档

    将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半...

    GDI+ SDK参考(翻译版本)

    将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半透明的...

    C语言图片腐蚀、膨胀的细化算法实例.rar

    C语言处理图片腐蚀、膨胀的细化算法实例,用C处理图像的例子。调试时请注意:运行测试文件时,需要测试调用的文件c:\...注意释放内存和位图,调色板句柄,还要注意重新分配内存和调色板,位图句柄时,先释放原来的。

    VB打造水波纹效果--waterctrl.dll控件

    'Bmp 位图句柄。 'WaterRadius 水纹半径,会令到水纹看起来范围更广。 'WaterHeight 水纹高度,会令到水纹看起来更深。 '注意,水纹插件自动根据图片来设定高度和宽度, '另外水纹底图必须是翻转的图片,显示的时候...

    易语言 茶凉专用模块

    参数 窗口句柄, 整数型, 可空, 要显示/隐藏的窗口句柄(可空:则显示/隐藏上次的窗口,如果为初次使用则为当前窗口) .子程序 窗口置父, 整数型, 公开, 指定一个窗口的新父(返回前一个父窗口的句柄) .参数 窗口句柄, ...

    GDI+_SDK参考.pdf

    将BMP图像转换为PNG图像 . - 100 - 设定JPEG的压缩等级 - 101 - 对JPEG图像进行无损变换 - 102 - 创建和保存多帧图像 - 105 - 从多帧图像中复制单帧 - 107 - Alpha 混合线条和填充 - 109 - 绘制不透明和半透明的线条...

    VC++做异形窗口 透明效果

    下面就以透明位图为背景的对话框为例来说明:首先用绘图软件如PhotoShop绘制编辑一幅拟做对话框背景用的图片,用BMP格式保存,假设存为Back.Bmp。需要说明的是,虽然Visual C++集成开发环境的资源编辑器只能编辑不...

    C++MFC教程

    2、开发注重交互的简单应用程序可以使用对话框为基础的窗口,如果文件读写简单这可利用CFile进行。 3、开发注重交互并且文件读写复杂的的简单应用程序可以利用以CFormView为基础视的单文档视结构。 4、利用对话框...

    Visual.C#2010从入门到精通

    9.4.1 BMP图像文件的结构 167 9.4.2 位图操作 169 9.4.3 CImage类 172 9.5 小结 174 第10章 对话框 175 10.1 控件 175 10.1.1 常用控件介绍 175 10.1.2 控件的创建 176 10.1.3 控件的消息 178 10.2 对话框的创建 181...

Global site tag (gtag.js) - Google Analytics