2012-05-04 8 views
1

私は現在、自分のアプリケーションでカラーピッキングを使用しています。 これはPCで動作しますが、さまざまなデバイスで動作させるのに問題があります。ピクセルの色が正確でない

これは、おそらく、デバイスによってコンテキストが異なるように設定されているためです。例えば、私が知っている限り、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

はい、それはちょっと複雑です。

現在のフレームバッファのビット深度を問い合わせることは、ES 2.0ではかなり簡単です(注:デスクトップGLではこれも有効ですが、この機能はGL 3.1コアでは削除されましたが、互換性プロファイルから引き続きアクセス可能です)。それぞれの色成分のビット深度を取得する必要があります:

GLint bitdepth; glGetIntegerv(GL_x_DEPTH、& bitdepth);

XREDの一つ、GREENBLUE、又はALPHAあります。

ビット深度を取得したら、それが565であるかどうかをテストして、適切なピクセル転送パラメータとカラー値を使用することができます。

0

glReadPixelsのパラメータは、GL_RGBA(常にサポートされます)またはGL_IMPLEMENTATION_COLOR_READ_FORMAT_OES(異なるデバイスで異なります)のいずれかでなければなりません。これはOpenGL ESの制限です。

関連する問題