【问题标题】:How to load bmp into GLubyte array?如何将 bmp 加载到 GLubyte 数组中?
【发布时间】:2010-09-24 14:08:25
【问题描述】:

全部,

我正在尝试将 bmp 文件加载到 GLubyte 数组中(不使用 aux)。

令人难以置信的是,我认为本应是一项微不足道的任务却占用了我数小时的时间。

在 Google 上似乎找不到任何东西!

这是我一起破解的,但效果不佳:

// load texture

GLubyte *customTexture;

string fileName("C:\\Development\\Visual Studio 2008\\Projects\\OpenGL_Test\\Crate.bmp");

// Use LoadImage() to get the image loaded into a DIBSection
HBITMAP hBitmap = (HBITMAP)LoadImage( NULL, (LPCTSTR)const_cast<char*>(fileName.c_str()), IMAGE_BITMAP, 0, 0, 
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );

customTexture = new GLubyte[3*256*256]; // size should be the size of the .bmp file

GetBitmapBits(hBitmap, 3*256*256, (LPVOID) customTexture);

GetBitmapDimensionEx(hBitmap,&szBitmap);

发生的情况是对 LoadImage 的调用似乎返回了未定义的值(NULL?我无法弄清楚它是否真的在加载 bmp - 有点困惑)。

目前我正在将 bmps 转换为 raw 那么这一切都很容易。

谁有更好更干净的sn-p?

【问题讨论】:

    标签: c++ opengl glut


    【解决方案1】:

    LoadImage() 只能使用资源编译器加载嵌入到可执行文件中的位图 - 它无法从文件系统加载外部位图。幸运的是,位图文件很容易自己阅读。有关文件格式的说明,请参阅Wikipedia

    只需像打开任何其他文件一样打开文件(重要:以二进制模式打开它,即使用fopen 使用"rb" 选项或使用ios::binary 标志使用C++ifstream),读取位图尺寸,读取原始像素数据。

    【讨论】:

    • 感谢您对 LoadImage 的评论-我知道如何使用 ifstream 打开文件-我有点希望我能找到一些 sn-p 而不是去那里并从头开始弄清楚如何读取字节-按字节(我什至认为我已经像 N 年前那样做了),因为这听起来像是一项常见任务
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多