社区
图形处理/算法
帖子详情
求保存bmp位图的简单代码
daotong
2006-04-06 04:21:13
我已经把位图读取出来,并且经过处理,要把感兴趣的部分保存为另一个位图,但是结果都是文件生成了,图像却是空的。我觉得应该是文件头没处理好,反复试了试也没成功,希望有懂的朋友给段简单明了的代码,最好是能编译通过。我刚学图像处理,水平太菜,参考一下大家的思路。
...全文
182
3
打赏
收藏
求保存bmp位图的简单代码
我已经把位图读取出来,并且经过处理,要把感兴趣的部分保存为另一个位图,但是结果都是文件生成了,图像却是空的。我觉得应该是文件头没处理好,反复试了试也没成功,希望有懂的朋友给段简单明了的代码,最好是能编译通过。我刚学图像处理,水平太菜,参考一下大家的思路。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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),再写进数据部分,你看看是不是写数据部分出错了?
BMP
24
位图
转16位
位图
的程序 exe
24位
BMP
图片转565格式16位数组C文件代码,生成的代码用于嵌入式程序代码中图片文件显示,
BMP
图片以数组的形式
保存
并读取
BMP
和JPG互转C++源代码
BMP
(Bitmap)是微软操作系统中的
位图
图像格式,它通常
保存
未经压缩的像素数据,因此文件体积较大。JPG(JPEG)则是一种广泛使用的有损压缩图像格式,适合存储照片或色彩丰富的图像,其压缩算法能够显著减小文件大小...
MFC对话框中点击按钮打开
bmp
图片并显示在picture中,同时可以另存
5. **显示
BMP
图像**:要将
BMP
图像显示在 CStatic 控件中,我们需要读取
BMP
文件,然后将其数据设置为控件的
位图
。这通常通过使用 CBitmap 类和 CDC 类来完成。首先,用 CBitmap 创建一个空的
位图
对象,然后使用...
编程用ICON,
BMP
等图片资源压缩包
2. **
位图
(
BMP
)**:
位图
是一种无损的图像文件格式,
保存
的是像素的色彩信息。
BMP
文件通常较大,因为它们不进行任何压缩,但能提供高质量的图像。在编程中,
BMP
文件常作为资源被加载到内存,用于显示在界面上。 接...
在MFC中实现显示摄像头画面并
保存
视频
可以使用OpenCV的`cv::imencode(".
bmp
", frame, params, &data)`来编码为
BMP
格式,然后在MFC中创建CBitmap对象,并加载这个数据。 6. **处理和
保存
视频**:如果你还需要对视频进行处理,如滤波、裁剪等,可以在读取...
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章