游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3311|回复: 7

BMP格式的高度图是怎么结构的??

[复制链接]

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
发表于 2008-9-24 22:07:00 | 显示全部楼层 |阅读模式
我一直用的高度图是1Byte保存一个高度,表示0-255.

今天看到一个用BMP格式保存的高度图也是0-255表示一个高度,请问一下BMP图的文件结构是怎样的??不知道结构没办法读取里面的数据啊...

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2008-9-24 22:48:00 | 显示全部楼层

Re:BMP格式的高度图是怎么结构的??

BMP图片其实就是一个DIB前面加一个文件头而已。


BITMAPFILEHEADER
BITMAPINFO
pvData
...

其中BITMAPFILEHEADER和BITMAPINFO中都有宽度和高度的描述。具体可以查Platform SDK。

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
 楼主| 发表于 2008-9-25 12:48:00 | 显示全部楼层

Re:BMP格式的高度图是怎么结构的??

具体从第几个字节开始是数据部分啊????我看SDK里的BITMAPFILEHEADER的成员bfoffBits是相对与
BITMAPFILEHEADER后数据开始的偏移位置于是用int iOffSet = sizeof(BITMAPFILEHEADER) + pBitMap.bfOffBits;不过看来是错的。

具体数据前面有那些数据结构啊?BITMAPFILEHEADER、BITMAPINFO然后就是数据????

23

主题

94

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2008-9-25 14:01:00 | 显示全部楼层

Re: Re:BMP格式的高度图是怎么结构的??

梁某: Re:BMP格式的高度图是怎么结构的??

具体从第几个字节开始是数据部分啊????我看SDK里的BITMAPFILEHEADER的成员bfoffBits是相对与
BITMAPFI...


是的

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
 楼主| 发表于 2008-9-25 15:48:00 | 显示全部楼层

Re:BMP格式的高度图是怎么结构的??

我这样做不知道对不对,因为我也不知道里面的数据是什么。
BITMAPFILEHEADER BitMap;
BITMAPINFO        BitMapInfo;

fread(&BitMap, sizeof(BITMAPFILEHEADER), 1, inFile);//读位图文件头
fread(&BitMapInfo, sizeof(BITMAPINFO), 1, inFile);//读位图信息

for (int i = 0; i < 192; ++i)//位图是192 * 192的
   for (int j = 0; j < 192; ++j)
        {
        char chRed;//r分量
        char chGreen;//g分量
        char chBlue;//b分量

        fread(&chRed, sizeof(char), 1, inFile);//r分量
        fread(&chGreen, sizeof(char), 1, inFile);//g分量
        fread(&chBlue, sizeof(char), 1, inFile);//b分量

        cout << RGB(chRed, chGreen, chBlue);//结果显示不是0-255的值啊……
        } [em17]

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
 楼主| 发表于 2008-9-25 19:58:00 | 显示全部楼层

Re:BMP格式的高度图是怎么结构的??

晕了,貌似数据区是有对齐的,并不单单是3位一个数据然后3位一个数据……T_T
哪位大哥能指教一下数据区是的数据是怎么排列的啊??图是真彩色图(24位)

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
 楼主| 发表于 2008-9-26 09:58:00 | 显示全部楼层

Re:BMP格式的高度图是怎么结构的??

跪求解答啊@_@急用……哪位兄弟可以帮忙说一下数据的排布形式

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
 楼主| 发表于 2008-9-26 19:42:00 | 显示全部楼层

Re:BMP格式的高度图是怎么结构的??

终于搞出来了,看了很久才看清楚BMP的结构原来挺简单的。

FILE *inFile = fopen(fileName, "rb");

        BITMAPINFO        BitMapInfo;
        BITMAPFILEHEADER BitMap;

        fread(&BitMap, 1, sizeof(BITMAPFILEHEADER), inFile);
        fread(&BitMapInfo, 1, sizeof(BITMAPINFO), inFile);
       
        int iWidth = BitMapInfo.bmiHeader.biWidth;
        int iHeight = BitMapInfo.bmiHeader.biHeight;
        int iDataSize = iWidth * iHeight * BitMapInfo.bmiHeader.biBitCount / 8;

        unsigned char* ucData = new unsigned char[iDataSize];

        fseek(inFile, BitMap.bfOffBits, 0);//offSet 54 Byte
        fread(ucData, 1, iDataSize, inFile); //dupilicate the data

        _heightmap.resize( _numVertices );

        for(int i = 0; i < iWidth * iHeight; i++)
                _heightmap = ucData[3 * i + 2];

        fclose(inFile);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 05:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表