2012-11-27 424 views
-1

我有一個問題,關於在opengl(手動)渲染位圖文件: 如何從無符號字符指針獲取數據以便在glDrawPixels函數中使用它們? (無符號字符* bitmap_Image)C++類的私有成員

class bitmap 
{ 
private: 
    unsigned long BPP; 
    unsigned long width; 
    unsigned long height; 
    unsigned long size; 
    unsigned char *bitmap_Image; // how use this member?? 
    unsigned int bps; 

public: 
    bitmap(); 
    ~bitmap(); 

    bool Load(const char *filename); 
    #pragma pack(push,1) 

    typedef struct 
    { 
    WORD bfType; 
    DWORD bfSize; 
    DWORD bfReserved; 
    DWORD bfOffBits; 
    }BITMAPFILEHEADER; 

    //BITMAPINFOHEADER 
    typedef struct 
    { 
    DWORD biSize; 
    LONG biWidth; 
    LONG biHeight; 
    WORD biPlanes; 
    WORD biBitCount; 
    DWORD biCompression; 
    DWORD biSizeImage; 
    LONG biXPelsPerMeter; 
    LONG biYPelsPerMeter; 
    DWORD biClrUsed; 
    DWORD biClrImportant; 
    }BITMAPINFOHEADER; 

    #pragma pack(pop) 

    BITMAPFILEHEADER FileHeader; 
    BITMAPINFOHEADER InfoHeader; 
}; 

回答

0

編輯:

已經閱讀問題再一次,你必須聲明一個公共成員至極返回內部指針bitmap_Image。

... 
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 (一個)。如果圖像的單行大小不能被4整除,還有另一個問題,您可能會在bitmap_Image字段中獲得無效數組。

glRasterPosglWindowPos將幫助您設置要渲染圖像的位置。

如果您使用的是沒有固定功能的GL2.0 +(儘管不太可能),那麼您應該創建4頂點陣列並使用簡單的片段着色器渲染四邊形。

+0

太感謝你了 –

+0

我會想辦法讓這個常數函數(也返回指向常量數據的指針) – datenwolf

+0

@datenwolf:起初我只是不確定glDrawPixels參數(const或非const),現在我查找了文檔並將const修飾符添加到GetImageData中。 –

0

你基本上需要您的位圖的二進制BLOB加載到字節(又名unsigned char)陣列,然後將它傳遞給你的glDrawPixels()功能:

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