游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3332|回复: 3

把一张BMP文件作为纹理,颜色与原来的图片不一致,为什

[复制链接]

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-9-22 15:57:00 | 显示全部楼层 |阅读模式
把一张BMP文件作为纹理,显示的颜色与原来的不一致,白色等颜色变成其他的颜色,而黑色,蓝色的好像没有关系,我的图片用程序自动生成,大小为256*256像素,24位,是不是生成图片的时候还需设置什么?

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-9-22 23:55:00 | 显示全部楼层

Re:把一张BMP文件作为纹理,颜色与原来的图片不一致,为

不知你用什么图形API,如果是OpenGL,在绑定纹理的时候,有一个参数表示颜色顺序的,如果本来的纹理是RGB的,你用BGR的顺序来读,颜色会不对,但图案本身没有错误,你可以试试看

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-9-23 11:04:00 | 显示全部楼层

Re: 把一张BMP文件作为纹理,颜色与原来的图片不一致,为

opengl程序:颜色定义为PFD_TYPE_RGBA,模式
static PIXELFORMATDESCRIPTOR pfd =
        {
                sizeof(PIXELFORMATDESCRIPTOR),  // size of this pfd
                1,                              // version number
                PFD_DRAW_TO_WINDOW   |          // support window
                PFD_SUPPORT_OPENGL |          // support OpenGL
                 PFD_DOUBLEBUFFER,             // double buffered
                PFD_TYPE_RGBA,                  // RGBA type
                24,                             // 24-bit color depth
                0, 0, 0, 0, 0, 0,               // color bits ignored
                0,                              // no alpha buffer
                0,                              // shift bit ignored
                0,                              // no accumulation buffer
                0, 0, 0, 0,                     // accum bits ignored
                32,                             // 16-bit z-buffer
                0,                              // no stencil buffer
                0,                              // no auxiliary buffer
                PFD_MAIN_PLANE,                 // main layer
                0,                              // reserved
                0, 0, 0                                                  // 忽略层遮罩
        };


下面这个是读取BMP文件的函数,把图片设置为纹理。



private:bool LoadTexture(LPTSTR szFileName, GLuint &texid)
{
        HBITMAP hBMP;                                                BITMAP BMP;                                                glGenTextures(1, &texid);         
        hBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL), szFileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );

        if (!hBMP)                                                        {
                 return FALSE;           
        }

        GetObject(hBMP, sizeof(BMP), &BMP
        glPixelStorei(GL_UNPACK_ALIGNMENT, 4);      
        glBindTexture(GL_TEXTURE_2D, texid);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);        glTexImage2D(GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);

        DeleteObject(hBMP);            
       
        return TRUE;
}


你指的是不是把glTexImage2D(GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);函数中的GL_BGR_EXT,换成GL_RGB,也没有用的。

0

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2008-10-23 16:44:00 | 显示全部楼层

Re: 把一张BMP文件作为纹理,颜色与原来的图片不一致,为

GL_RGB
GL_BGR / GL_BGR_EXT

无效?首先确保你的BMP文件本身是正确的吧。

对于BMP,我向来是fopen之后偏移54字节,然后fread出所需的字节数。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 02:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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