| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1111 人关注过本帖
标题:昨晚翻看opengl, 无意间学会了解析 bmp
只看楼主 加入收藏
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
结帖率:91.67%
收藏
已结贴  问题点数:20 回复次数:13 
昨晚翻看opengl, 无意间学会了解析 bmp
//昨晚翻看opengl, 无意间学会了解析 bmp
//据说图像存储可能会有内存对齐,根据微软一贯的恶心作风,
//本人断言,bmp 是 四字节对齐,果然不出所料...

skip = 4 - (*width * 3) % 4;
k = 0;

for (i = 0; i < *height; i++)
{
    for (j = 0; j < *width; j++)
    {
        b = getc(file);
        g = getc(file);
        r = getc(file);

        pixels[k++] = r;
        pixels[k++] = g;
        pixels[k++] = b;
    }

    fseek(file, skip, SEEK_CUR);
}
搜索更多相关主题的帖子: 微软 
2011-03-21 10:03
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:3 
有点意思!

   唯实惟新 至诚致志
2011-03-21 10:13
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:3 
做图像处理我觉得用opencv比较方便,当然做游戏就得用opengl了
2011-03-21 10:27
canxden
Rank: 3Rank: 3
来 自:江西奉新
等 级:论坛游侠
帖 子:114
专家分:105
注 册:2011-3-18
收藏
得分:3 
路过一下

一个人能有多坚强,太安静,就成了孤单。
2011-03-21 10:33
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:3 
楼主你应该给多点分

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-03-21 11:26
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:3 

程序代码:
    //read image
    FILE *fp; 
    if((fp=fopen(name.c_str(),"rb"))==NULL) {
        printf("cannot open bmp.name\n");
        return ;
    }    
    fread(&bfType,sizeof(WORD),1,fp); 
    if(bfType!=0x4d42) {//该值必需是0x4D42,也就是字符'BM'
        printf("the input map is not bmp type");        
        return ;
    } 
    fread(&bfSize,sizeof(DWORD),1,fp);
    fread(&bfReserved1,sizeof(WORD),1,fp); 
    fread(&bfReserved2,sizeof(WORD),1,fp); 
    fread(&bfOffBits,sizeof(DWORD),1,fp); 
    fread(&bih,sizeof(BITMAPINFOHEADER),1,fp); 
    width=bih.biWidth ; 
    height=bih.biHeight;
    if(width % 4 !=0) 
        width=width+ (4-width % 4); 
    DWORD size=width*(bih.biBitCount/8)*height;
    unsigned char* pData=new unsigned char[size]; 

    fread(pData,size,1,fp); 
    
    int bmWidthBytes=width*bih.biBitCount /8; 
    int bmBitsPixel=bih.biBitCount ; 
    int nBit=bmBitsPixel/8; 

    int z; 
    
    for (int y=0; y<height; y++) 
    { 
        for (int x=0; x<width; x++) 
        { 
            z=height-y-1; 
            *(r+(y*width+x))=pData[x*nBit+2+z*bmWidthBytes];
            *(g+(y*width+x))=pData[x*nBit+1+z*bmWidthBytes];
            *(b+(y*width+x))=pData[x*nBit+z*bmWidthBytes];
        } 
    } 


[ 本帖最后由 njkido 于 2011-3-21 12:38 编辑 ]
2011-03-21 11:43
like2266
Rank: 2
等 级:论坛游民
帖 子:17
专家分:40
注 册:2011-3-19
收藏
得分:3 
写的不太对吧?
2011-03-21 11:48
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
只好说实话了,我不懂!是打开一个bmp文件吗?

   唯实惟新 至诚致志
2011-03-21 12:22
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
以下是引用like2266在2011-3-21 11:48:52的发言:

写的不太对吧?
恩, 确实有一个小问题, 你看出来了

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2011-03-21 12:23
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
以下是引用flylee在2011-3-21 10:27:57的发言:

做图像处理我觉得用opencv比较方便,当然做游戏就得用opengl了
不知道您对 png, gif, jpg这些格式的图片是否了解,

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2011-03-21 12:53
快速回复:昨晚翻看opengl, 无意间学会了解析 bmp
数据加载中...
 
   



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

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