|
|
发表于 2004-12-15 18:08:00
|
显示全部楼层
Re:请教流的问题
read(char * buffer ,int size),就是从当前读写游标处读取size大小的数据到buffer里,第一个参数需要是char * ,如果是纯粹二进制数据流,可以强行把结构指针强制转换成char(我后面附一个读位图数据的代码),而读取游标位置由tellg()获得,移动读取游标用seekg方法,具体的建议找本书来看看。
- #include <windows.h>
- #include <fstream.h>
- //简化版,功能为把一张32位位图像素数据读出,只取蓝绿为0的像素值
- //代码不完整!只是表示个意思而已
- fstream fzDataFile;
- BITMAPFILEHEADER bf;
- BITMAPINFOHEADER bi;
- RGBQUAD Indata;
- fzDataFile.open("dart.bmp",ios::in|ios::binary);
-
- fzDataFile.read((char *)&bf,sizeof(BITMAPFILEHEADER));
- fzDataFile.read((char *)&bi,sizeof(BITMAPINFOHEADER));
- fzDataFile.seekg(bf.bfOffBits);
- int i,j;
- unsigned int score;
- for(i=bi.biHeight-1;i>=0;i--)
- {
- for(j=0;j<bi.biWidth;j++)
- {
- fzDataFile.read((char *)&Indata,sizeof(RGBQUAD));
- score = (unsigned)Indata.rgbBlue;
-
- if(Indata.rgbGreen!=0 ||Indata.rgbRed !=0) score=0;
- ScoreMap[i][j]=score;
- }
- }
- fzDataFile.close();
复制代码 |
|