| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 864 人关注过本帖
标题:问个弱弱的问题!
只看楼主 加入收藏
Rey1023
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-3-10
结帖率:0
收藏
 问题点数:0 回复次数:8 
问个弱弱的问题!

我在看代码的时候看到了一段不懂的代码,是关于DIB的类定义的
int CDib::SaveBmp(LPCSTR filename)
{
BITMAPFILEHEADER hdr;
CFile file(filename,CFile::modeWrite|CFile::modeCreate);
//头文件
hdr.bfType=((WORD)'M'<<8)+'B';
LPBITMAPINFO pbi=GetBitmapInfo();
PBITMAPINFOHEADER pbih=(PBITMAPINFOHEADER)pbi;

hdr.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrUsed*sizeof(RGBQUAD)+pbih->biSizeImage);
hdr.bfReserved1=0;
hdr.bfReserved2=0;

hdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrUsed*sizeof(RGBQUAD);
//写入头文件
file.Write((LPVOID)&hdr,sizeof(BITMAPFILEHEADER));
//写入信息头
file.Write((LPVOID)pbih,sizeof(BITMAPINFOHEADER)+pbih->biClrUsed*sizeof(RGBQUAD));
//写入数据
int nTotal=pbih->biSizeImage;
LPVOID lpBits=GetBits();
file.WriteHuge(lpBits,nTotal);

file.Close();

delete pbi;
return 1;
}
红色的地方看不怎么懂,<<的用法,我查了一下MSDN,好像也不是这样用的,高手帮忙解释一下,谢谢了!

搜索更多相关主题的帖子: pbi CFile hdr sizeof filename 
2007-08-02 11:40
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
收藏
得分:0 
以下是引用Rey1023在2007-8-2 11:40:14的发言:

我在看代码的时候看到了一段不懂的代码,是关于DIB的类定义的
int CDib::SaveBmp(LPCSTR filename)
{
BITMAPFILEHEADER hdr;
CFile file(filename,CFile::modeWrite|CFile::modeCreate);
//头文件
hdr.bfType=((WORD)'M'<<8)+'B'; 应该是BM吧,怎么好像这样求出来的是MB啊
LPBITMAPINFO pbi=GetBitmapInfo();
PBITMAPINFOHEADER pbih=(PBITMAPINFOHEADER)pbi;

hdr.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrUsed*sizeof(RGBQUAD)+pbih->biSizeImage);
hdr.bfReserved1=0;
hdr.bfReserved2=0;

hdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrUsed*sizeof(RGBQUAD);
//写入头文件
file.Write((LPVOID)&hdr,sizeof(BITMAPFILEHEADER));
//写入信息头
file.Write((LPVOID)pbih,sizeof(BITMAPINFOHEADER)+pbih->biClrUsed*sizeof(RGBQUAD));
//写入数据
int nTotal=pbih->biSizeImage;
LPVOID lpBits=GetBits();
file.WriteHuge(lpBits,nTotal);

file.Close();

delete pbi;
return 1;
}
红色的地方看不怎么懂,<<的用法,我查了一下MSDN,好像也不是这样用的,高手帮忙解释一下,谢谢了!


2007-08-02 12:05
Rey1023
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-3-10
收藏
得分:0 
我也觉得应该是,但没报错!

人生就是一场赌博,生命中最重要的是尝试.生活中最糟糕的事情不是你冒险失败,而是你根本没有去尝试!
2007-08-02 12:32
Rey1023
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-3-10
收藏
得分:0 

怎么就没人看看哦!


人生就是一场赌博,生命中最重要的是尝试.生活中最糟糕的事情不是你冒险失败,而是你根本没有去尝试!
2007-08-03 15:52
youniankang
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-7-18
收藏
得分:0 
我看了
不过看不懂
还没学到那里类

2007-08-04 19:21
youniankang
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-7-18
收藏
得分:0 
等我学到那里了
我在回头教你```

2007-08-04 19:22
sifact
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-5
收藏
得分:0 
hdr.bfType=((WORD)'M'<<8)+'B';
实际上就是"BM"字母.
M的二进制数左移八位再与B的二进制或出的数
这结果的二进制数即为"BM"的二进制数100110101000010,十六进制为0x4d42
实际上是写程序的人罗嗦多事.
2007-08-05 04:16
sifact
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-5
收藏
得分:0 

是BM二个字母表示成(WORD)二字节的一种方法.

2007-08-05 04:21
Rey1023
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-3-10
收藏
得分:0 
  很久没上了,谢谢!

人生就是一场赌博,生命中最重要的是尝试.生活中最糟糕的事情不是你冒险失败,而是你根本没有去尝试!
2007-08-17 10:09
快速回复:问个弱弱的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039515 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved