2012-05-04 98 views
1

我目前在我的應用程序中使用顏色選擇。 這適用於個人電腦,但我很難讓它在各種設備上工作。獲取像素顏色不準確

這可能是由於上下文設置不同,具體取決於設備。例如,據我所知,PC設置爲888的顏色,而設備可能默認爲565.

我想知道是否有方法在OpenGL中獲取當前的像素/顏色格式,以便我可以正確檢索顏色數據?

這是我使用的功能,在PC上正常工作:

inline void ProcessColourPick(GLubyte *out, KDfloat32 x, KDfloat32 y) 
{ 
    GLint viewport[4]; 
    GLubyte pixel[3]; 

    glGetIntegerv(GL_VIEWPORT,viewport); 

    //Read colour of pixel at a specific point in the framebuffer 

    glReadPixels(x,viewport[3]-y,1,1, 
     GL_RGB,GL_UNSIGNED_BYTE,(void *)pixel); 

    out[0] = pixel[0]; 
    out[1] = pixel[1]; 
    out[2] = pixel[2]; 
} 

任何想法?

回答

1

是的,但有點複雜。 (注意:這在Desktop GL中也是合法的,但是這個功能在GL 3.1內核中被刪除了,仍然可以從兼容性配置文件中訪問)。你必須得到每個顏色分量的深度:

GLint bitdepth; glGetIntegerv(GL_x_DEPTH,& bitdepth); glGetIntegerv(GL_x_DEPTH,& bitdepth);

XRED一個,GREENBLUE,或ALPHA

一旦你有了深度,你可以測試它是否是565,並使用適當的像素傳輸參數和顏色值。

0

glReadPixelsformat參數必須是GL_RGBA(始終支持)或GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES(在不同設備上有所不同)。這是一個OpenGL ES限制。