- 浏览: 14671 次
- 性别:
- 来自: 上海
最新评论
bmp保存
2010年10月24日
CFileDialog dlg(false,"*.bmp",NULL,NULL,"*.bmp|*.bmp||");
if (dlg.DoModal()==IDOK)
{
SaveBitmapToFile(hBitmap,dlg.GetPathName());
PostQuitMessage(0);
}
BOOL SaveBitmapToFile(HBITMAP hBitmap, LPCTSTR lpFileName )
{
HDC hDC; //设备描述表
int iBits; //当前显示分辨率下每个像素所占字节数
WORD wBitCount; //位图中每个像素所占字节数
DWORD dwPaletteSize=0, //定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
dwBmBitsSize,
dwDIBSize, dwWritten;
BITMAP Bitmap; //位图属性结构
BITMAPFILEHEADER bmfHdr; //位图文件头结构
BITMAPINFOHEADER bi; //位图信息头结构
LPBITMAPINFOHEADER lpbi; //指向位图信息头结构
HANDLE fh, hDib, hPal,hOldPal=NULL; //定义文件,分配内存句柄,调色板句柄
//计算位图文件每个像素所占字节数
HDC hWndDC = CreateDC("DISPLAY",NULL,NULL,NULL);
hDC = ::CreateCompatibleDC( hWndDC ) ;
iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits <= 1)
wBitCount = 1;
else if (iBits <= 4)
wBitCount = 4;
else if (iBits <=
wBitCount = 8;
else if (iBits <= 24)
wBitCount = 24;
else
wBitCount = 24 ;
//计算调色板大小
if (wBitCount <=
dwPaletteSize = (1 << wBitCount) * sizeof(RGBQUAD);
//设置位图信息头结构
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
dwBmBitsSize = ((Bitmap.bmWidth * wBitCount+31)/32) * 4 * Bitmap.bmHeight ;
//为位图内容分配内存
hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,
(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)
+dwPaletteSize,
(LPBITMAPINFO )
lpbi, DIB_RGB_COLORS);
//恢复调色板
if (hOldPal)
{
SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}
//创建位图文件
fh = CreateFile(lpFileName, GENERIC_WRITE,
0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE)
return FALSE;
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER)
+ sizeof(BITMAPINFOHEADER)
+ dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)
+ (DWORD)sizeof(BITMAPINFOHEADER)
+ dwPaletteSize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwDIBSize,
&dwWritten, NULL);
//清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;
}
出处:http://www.vczx.com/forum/showthread.php?threadid=12783
发表评论
-
linux下编程实现mplayer播放器总结
2012-01-20 00:13 1020linux下编程实现mplayer播放器总结 2011年05 ... -
掌握 Linux 调试技术 +Debian/Ubuntu内核编程者必备
2012-01-20 00:13 688掌握 Linux 调试技术 +Debian/Ubuntu内核编 ... -
操作系统学习笔记1
2012-01-20 00:13 674操作系统学习笔记1 2010 ... -
深入理解控制台程序
2012-01-20 00:13 882深入理解控制台程序 2010年06月26日 在Delph ... -
Java IO 技术之基本流类
2012-01-20 00:13 531Java IO 技术之基本流类 ... -
C/C++ > UNIX系统程序设计
2012-01-19 01:05 645C/C++ > UNIX系统程序设 ... -
C段错误总结
2012-01-19 01:05 624C段错误总结 2012年01月07日 最近一段时间在li ... -
liniux学习
2012-01-19 01:05 850liniux学习 2010年06月08日 ... -
PNG文件结构(PNG图片格式)详解(转)
2012-01-19 01:04 1340PNG文件结构(PNG图片格式 ... -
delphi中opengl程序设计
2012-01-19 01:04 659delphi中opengl程序设计 2011年06月07日 ... -
BMP文件加载探讨(转http://blog.sina.com.cn/s/blog_5da62ae00100pyls.html)
2012-01-17 00:28 800BMP文件加载探讨(转http://blog.sina.com ... -
使用jpeglib,实现jpg和bmp互转
2012-01-17 00:27 1609使用jpeglib,实现jpg和bmp互转 2011年10月 ... -
BMP文件操作方法(一个月研究出来的)
2012-01-17 00:27 703BMP文件操作方法(一个月研究出来的) 2011年07月20 ... -
BMP位图文件的存储格式3
2012-01-17 00:27 653BMP位图文件的存储格式3 2011年06月18日 1. ... -
很久很久以前的事
2012-01-16 13:53 735很久很久以前的事 2010年08月01日 今天给自己的大 ... -
2011-9-15
2012-01-16 13:53 5092011-9-15 2011年09月15日 第 1课时 ... -
如何培养一年级学生良好的学习习惯
2012-01-16 13:53 514如何培养一年级学生良好的学习习惯 2011年06月28日 ... -
各位家长非常辛苦,其他老师也很辛苦,孩子也很辛苦。希望我们相互理解,用朋友的角度去商量让孩子变的好起来
2012-01-16 13:53 551各位家长非常辛苦,其他 ... -
日记那点破事儿
2012-01-16 13:53 329日记那点破事儿 2011年0 ...
相关推荐
bmp位图文件的读取与保存 bmp位图文件的读取与保存,可以借此熟悉bmp的文件结构
C++读取保存BMP图像,包括8位,24位的读取和保存,灰度图的转换,不使用任何已有读取、转换、保存等库函数。跨平台使用,理论上Linux与Windows上均可使用,Windows上测试成功。
ARM Cortex-A8平台Linux下V4l2摄像头采集图片程序,实现yuyv转RGB,RGB转BMP保存,RGB缩放等功能。利用jpeglib实现RGB转JPEG,并且压缩结果保存至内存中,无需再用文件操作来保存JPEG图片,JPEG经UDP发送至远程服务器...
本程序是基于vc++开发环境的,实现bmp文件的打开与保存功能的一个程序
下载后可以直接使用,没有使用系统路径添加OPENCV的头和库文件,所以不需要配置! 其实就是将从DICOM所获得的图像数据赋值给OPENCV中指向图像数据的指针。 测试过DICOM的超声图像。可以正常转换!
一个图像的读出与保存的程序,希望对初学者有所帮助!
stm32f103双气压IIC读取BMP180
Firefly RK3588S获取通过v4l2获取图像,并转bmp格式保存本地
自己编写的bmp图像打开和保存,并切添加了24位自动转换为8位的功能;源代码有详细的注释,对各位一定有帮助的
图片批量保存器 可以把图片批量的原样保存到mdb数据库中,然后随意查看。 支持bmp,jpg,gif等等。没有压缩功能。
使用C++读取TM遥感数据,并写成8位的BMP位图
jpg图像或者bmp图像保存为dcm格式文件。注意文件中,并未给出PatientData和ExaminationData源代码,里面只是常见的get和set,请各位自行去掉。或者,直接将里面用到该类的get的地方,替换为任意值即可。
批量快速将多张bmp图片转换为bin文件,bmp图片位深度为24bit,bin文件可选择8bit(RGB323)、16bit(RGB565)、24bit(RGB888) 输出,用于烧录到 外部flash,单片机去读取数据显示图像。因为输出每张bmp图片所在flash里的...
VC++用ADO技术连接数据库,载入、保存、显示BMP位图,把位图文件载入数据库,并把数据库中的位图显示出来。
这是一个基于vc++6.0的MFC程序,当然你可以改为其他的语言或者环境,当然这个程序并不算很优秀因为这不是我首创,如果你不能编译本程序,或者急需本软件所有代码及exe或者其他相关的转化软件或者其他平台的此类软件...
bmp位图文件的读取与保存
API函数抓屏实例 HANDLE WINAPI DIBFromWindow(CWnd *pWnd, CRect* pRect); BOOL WINAPI SaveToFile(HANDLE hDib, CFile& file);
保存bmp图片的源码
该软件可以将BMP格式的图片转化为自己定义的格式的视频。
BufferedImage 保存 BMP格式 文件