社区
图形处理/算法
帖子详情
求保存bmp位图的简单代码
daotong
2006-04-06 04:21:13
我已经把位图读取出来,并且经过处理,要把感兴趣的部分保存为另一个位图,但是结果都是文件生成了,图像却是空的。我觉得应该是文件头没处理好,反复试了试也没成功,希望有懂的朋友给段简单明了的代码,最好是能编译通过。我刚学图像处理,水平太菜,参考一下大家的思路。
...全文
220
3
打赏
收藏
求保存bmp位图的简单代码
我已经把位图读取出来,并且经过处理,要把感兴趣的部分保存为另一个位图,但是结果都是文件生成了,图像却是空的。我觉得应该是文件头没处理好,反复试了试也没成功,希望有懂的朋友给段简单明了的代码,最好是能编译通过。我刚学图像处理,水平太菜,参考一下大家的思路。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hisky1983
2006-04-06
打赏
举报
回复
BITMAPFILEHEADER bmfHdr;
LPBITMAPINFOHEADER lpBI;
DWORD dwDIBSize;
if (hDib == NULL)
{
return FALSE;
}
// 读取BITMAPINFO结构,并锁定
lpBI = (LPBITMAPINFOHEADER)
::GlobalLock((HGLOBAL) hDib);
if (lpBI == NULL)
{
return FALSE;
}
//判断是否是WIN3.0 DIB
if (!IS_WIN30_DIB(lpBI))
{
::GlobalUnlock((HGLOBAL) hDib);
return FALSE;
}
// 文件类型"BM"
bmfHdr.bfType ='MB';
// 文件头大小+颜色表大小
// (BITMAPINFOHEADER和BITMAPCOREHEADER结构的第一个DWORD都是该结构的大小)
dwDIBSize = *(LPDWORD)lpBI + cdib::PaletteSize((LPSTR)lpBI);
// 计算图像大小
if ((lpBI->biCompression == BI_RLE8) || (lpBI->biCompression == BI_RLE4))
{
// 对于RLE位图,没法计算大小,只能信任biSizeImage内的值
dwDIBSize += lpBI->biSizeImage;
}
else
{
DWORD dwBmBitsSize;
dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) * lpBI->biHeight;
// 计算出DIB真正的大小
dwDIBSize += dwBmBitsSize;
// 更新biSizeImage(很多BMP文件头中biSizeImage的值是错误的)
lpBI->biSizeImage = dwBmBitsSize;
}
// 计算文件大小:DIB大小+BITMAPFILEHEADER结构大小
bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);
// 两个保留字
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
// 计算偏移量bfOffBits,它的大小为Bitmap文件头大小+DIB头大小+颜色表大小
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize + PaletteSize((LPSTR)lpBI);
CFile file;
建立文件file.create(....)
file.SetLength(bmfHdr.bfSize);
file.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER));
file.WriteHuge(lpBI,dwDIBSize);
wlwlxj
2006-04-06
打赏
举报
回复
下一个CDib类可以搞定
celiacw
2006-04-06
打赏
举报
回复
保存位文件时用Cfile类的一个对象如file,调用其成员函数file.write(参数省略,自己找),先写进文件头(BITMAPFILEHEADER),再写进数据部分,你看看是不是写数据部分出错了?
RGB数据
保存
为
BMP
图片
一、
BMP
文件由文件头、
位图
信息头、颜色信息和图形数据四部分组成。 1、
BMP
文件头(14字节) [cpp] view plain copy typedef struct /****
BMP
file header structure ****/ { unsigned int
如何将
位图
对象
保存
为
BMP
文件
GDI中
位图
对象是很常见的GDI对象,但是无论是SDK,还是MFC都没有提供现在的函数或是方法来将一个
位图
对象
保存
为一个
BMP
文件,这里介绍一下
保存
方法。
位图
文件格式:DIB文件有四个主要部分:文件表头(BITMAPFILEHEADER)信息表头 (BITMAPINFOHEADER)调色板(不一定有)
位图
图素位而一个
位图
对象和上述唯一不同在于它没有文件表头。
MFC下256色
BMP
位图
的
保存
一、
BMP
位图
的文件格式
BMP
文件的数据按照从文件头开始的先后顺序分为四个部分: ◆
位图
文件头(
bmp
file header): 提供文件的格式、大小等信息 ◆
位图
信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息 ◆ 调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色
C++ 实现
BMP
位图
读写
BMP
文件读写 1. 问题描述 分析图像格式
BMP
–可借助Matlab体会图像的读写和显示。 利用C语言编写程序,实现图像的输入和输出和显示。 –自行编写
BMP
文件的读写。 –调用开源库实现其他若干常见图像和视频文件格式的输入和输出。 –设计功能较完整的界面。 2. 技术背景 opencv Visual Studio 2019 3. 解决方案 3.1
BMP
文件结构
BMP
文件由4部分组成:
位图
文件头(bitmap-file header)
位图
信息头(bitmap-informati
将RGB纯数据
保存
生成
bmp
图片(
位图
)
在图像算法测试中,验证RGB数据是否正确通常将它生成
位图
,然后打开图片来验证。 //
BMP
文件头(14字节) typedef struct /****
BMP
file header structure ****/ { unsigned int bfSize; /* Size of file */ unsigned...
图形处理/算法
19,463
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章