2012-05-04 70 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限制。