使用位图句柄,将其保存为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;
}
}
发表评论
-
Linux私房菜 课后练习第十章
2012-01-20 00:13 529Linux私房菜 课后练习第十章 2011年06月15日 ... -
JAVA I / O操作与字节流
2012-01-20 00:13 849JAVA I / O操作与字节流 2010年08月17日 ... -
Linux Kernel 核心中文手册(5)--进程间通信机制
2012-01-20 00:13 729Linux Kernel 核心中文手册(5)--进程间通信机制 ... -
S3C2440上触摸屏驱动实例开发讲解(转)
2012-01-20 00:13 636S3C2440上触摸屏驱动实例开发讲解(转) 2011年04 ... -
linux 笔记
2012-01-20 00:13 557linux 笔记 2010年10月31日 ... -
全国各地的美女特点一览
2012-01-19 01:05 618全国各地的美女特点一览 2011年05月07日 ... -
全国各地的美女特点一览
2012-01-19 01:05 588全国各地的美女特点一 ... -
上海女人之前世今生
2012-01-19 01:05 511上海女人之前世今生 20 ... -
2011-9-29
2012-01-19 01:05 5752011-9-29 2011年09月29日 vbs常用代 ... -
VC中的0XCCCCCCCC
2012-01-19 01:05 1222VC中的0XCCCCCCCC 2011年10月23日 在 ... -
bmp/gif/jpg图象最底层原理分析(1)----jpg
2012-01-17 00:28 637bmp/gif/jpg图象最底层原 ... -
索引模式下深度为8或4的BMP图
2012-01-17 00:28 854索引模式下深度为8或4 ... -
24bitbmp to bmp565
2012-01-17 00:28 85324bitbmp to bmp565 2011年10月22日 ... -
计算机C语言编程-----C语言保存图形为16色BMP文件
2012-01-17 00:28 647计算机C语言编程-----C语言保存图形为16色BMP文件 ... -
小学生评语大全{六年级}
2012-01-15 14:47 549小学生评语大全{六年级 ... -
最有文采有学生评语下载大全
2012-01-15 14:47 664最有文采有学生评语下载大全 2010年01月22日 h ... -
作文评语大全
2012-01-15 14:47 526作文评语大全 2009年10 ... -
小学生期末评语经典大全
2012-01-15 14:47 545小学生期末评语经典大全 2011年12月15日 1.你是 ... -
作文评语大全
2012-01-15 14:47 581作文评语大全 2009年11 ...
相关推荐
DELPHI过程:保存HBITMAP句柄资源到BMP图象文件,支持1、4、8、16、24、32位色深.
得到桌面dc ,转化成位图句柄,保存到bmp文件中
获得HBITMAP句柄后(比如读取一个位图文件或由程序动态生成),保存为bmp图片。支持1、4、8、16、24、32位。代码清晰,注释完整,值得参考。
易语言位图操作类模块源码,位图操作类模块,通过句柄取图标,取文件图标,初始化颜色表,CaptureDC,GetBitsAddress,GetBitsSize,BytesPerLine,Create,SetPixelColor,GetBitmapInfoAddress,GetWidth,GetHeight,WIDTHBYTES...
//位图中每象素所占字节数为1/2/4/8/16/24/32 WORD wBitCount = wBitCountIN; //定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数 DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, ...
//snake图像位图句柄 HBITMAP bufferBMP = NULL; //缓冲位图句柄 HBITMAP endBMP = NULL; //游戏终结图像内存句柄 HBITMAP hbmpWall = NULL; //墙位图句柄 HBITMAP hbmpScore = NULL; //分数板位图句柄 HBRUSH ...
首先获取位图句柄: HBITMAP hBmp = (HBITMAP) ::LoadImage (AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0,LR_CREATEDIBSECTION); 然后根据位图句柄得到位图信息: BITMAP BM; ::...
1.10、BMP位图显示方法 1.11、截取Cstring中某一部分_例 1.12、格式化CString数据 1.13、CString数据写入到文件 1.14、读取数据文件到Cstring对象 1.15、绘图 1.16、使按钮/菜单项失效和生效 1.17、在EDIT控件中追加...
将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半透明的...
VC实现读取BMP图像,是用文档句柄来实现,支持多种位图的读取。
将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半透明的...
将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半...
将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半透明的...
C语言处理图片腐蚀、膨胀的细化算法实例,用C处理图像的例子。调试时请注意:运行测试文件时,需要测试调用的文件c:\...注意释放内存和位图,调色板句柄,还要注意重新分配内存和调色板,位图句柄时,先释放原来的。
'Bmp 位图句柄。 'WaterRadius 水纹半径,会令到水纹看起来范围更广。 'WaterHeight 水纹高度,会令到水纹看起来更深。 '注意,水纹插件自动根据图片来设定高度和宽度, '另外水纹底图必须是翻转的图片,显示的时候...
参数 窗口句柄, 整数型, 可空, 要显示/隐藏的窗口句柄(可空:则显示/隐藏上次的窗口,如果为初次使用则为当前窗口) .子程序 窗口置父, 整数型, 公开, 指定一个窗口的新父(返回前一个父窗口的句柄) .参数 窗口句柄, ...
将BMP图像转换为PNG图像 . - 100 - 设定JPEG的压缩等级 - 101 - 对JPEG图像进行无损变换 - 102 - 创建和保存多帧图像 - 105 - 从多帧图像中复制单帧 - 107 - Alpha 混合线条和填充 - 109 - 绘制不透明和半透明的线条...
下面就以透明位图为背景的对话框为例来说明:首先用绘图软件如PhotoShop绘制编辑一幅拟做对话框背景用的图片,用BMP格式保存,假设存为Back.Bmp。需要说明的是,虽然Visual C++集成开发环境的资源编辑器只能编辑不...
2、开发注重交互的简单应用程序可以使用对话框为基础的窗口,如果文件读写简单这可利用CFile进行。 3、开发注重交互并且文件读写复杂的的简单应用程序可以利用以CFormView为基础视的单文档视结构。 4、利用对话框...
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...