Arrays c+的私人成员+;班级

Arrays c+的私人成员+;班级,arrays,class,visual-c++,bitmap,Arrays,Class,Visual C++,Bitmap,我有一个问题,关于在opengl中渲染位图文件(手动): 如何从无符号字符指针获取数据,以便在glDrawPixels函数中使用它们? (无符号字符*位图\图像) 编辑: 再次阅读该问题后,您必须声明一个公共成员,该成员返回内部指针位图图像 ... public: const unsigned char* GetImageData() const { return bitmap_Image; } int GetWidth() const { return width; } in

我有一个问题,关于在opengl中渲染位图文件(手动): 如何从无符号字符指针获取数据,以便在glDrawPixels函数中使用它们? (无符号字符*位图\图像)

编辑:

再次阅读该问题后,您必须声明一个公共成员,该成员返回内部指针位图图像

...
public:
   const unsigned char* GetImageData() const { return bitmap_Image; }
   int GetWidth() const { return width; }
   int GetHeight() const { return heigth; }
   int GetBPP() const { return BPP; }
...
没有其他(标准和安全的)方法可以绕过这片土地的私密性

假设BPP是BitsPerPixel,它是24或32,您可以调用

 bitmap* YourBmp = ... // construct and load

 const unsigned char* Ptr = YourBmp->GetImageData();
 int W = YourBmp->GetWidth();
 int H = YourBmp->GetHeight();
 int Fmt  = (YourBmp->GetBPP() == 24) ? GL_BGR : GL_BGRA; // or maybe GL_RGB or GL_RGBA
 int Type = GL_UNSIGNED_BYTE;
 glDrawPixels(W, H, Fmt, Type, Ptr);
如果您的图像使用调色板(8位或更少),则会出现问题-您必须将其转换为RGB(A)。还有一个问题,如果图像的单行大小不能被4整除,则在
bitmap\u image
字段中可能会得到无效数组

glRasterPos
glWindowPos
将帮助您设置要渲染图像的位置


如果您使用的GL2.0+没有固定的函数(虽然不太可能),那么您应该创建4顶点数组,并使用简单的片段着色器渲染四元组。

基本上需要将位图二进制blob加载到字节(aka.
unsigned char
)数组中,然后将其传递给
glDrawPixels()
函数:

unsigned char[] myBitmap;
...
glDrawPixels( ..., &myBitmap, ... );

我想把它变成一个常量函数(也返回指向常量数据的指针)@datenwolf:起初我只是不确定glDrawPixels参数(常量或非常量),现在我查阅了文档,并在GetImageData中添加了常量修饰符。谢谢您的编辑。今天我使用这个代码,在构建解决方案和运行程序后出错“程序已停止工作”,所以我决定在控制台(cmd)中打印位图_图像数组,发现const unsigned char*Ptr=YourBmp->GetImageData();无法显示我的位图数据:|”无法显示“-你是说程序在添加“const”修饰符后停止工作,还是说程序不工作?可能您的构造函数和load()函数中有错误。谁也猜不到。
unsigned char[] myBitmap;
...
glDrawPixels( ..., &myBitmap, ... );