如何从colors.xml为GLES20.glClearColor()提供参数?

时间:2013-08-24 19:46:17

标签: android opengl-es opengl-es-2.0

在应用程序的 res / values / colors.xml 文件中,红色以 #AARRGGBB 格式定义:

    <color name="red">#ffff0000</color>

如何将此颜色用作glClearColor和其他OpenGL ES函数的参数? 例如:

     public void onSurfaceCreated(GL10 unused, EGLConfig config) {
         GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // <-- How to connect R.color.red here? 
     }

3 个答案:

答案 0 :(得分:4)

Color类具有支持此功能的静态方法。如果strColor是字符串格式的颜色,可以是#RRGGBB#AARRGGBB或颜色名称,则可以使用以下内容将其转换为OpenGL所需的值:

int intColor = Color.parseColor(strColor);
GLES20.glClearColor(Color.red(intColor) / 255.0f,
                    Color.green(intColor) / 255.0f,
                    Color.blue(intColor) / 255.0f);

答案 1 :(得分:3)

您应该使用shift来隔离各个字节,将它们转换为浮点数然后除以将它们缩小到0.0f到1.0f的范围。它应该是这样的:

   unsigned long uColor; // #AARRGGBB format

    float fAlpha = (float)(uColor >> 24) / 0xFF
    float fRed = (float)((uColor >> 16) & 0xFF) / 0xFF;
    float fGreen = (float)((uColor >> 8) & 0xFF) / 0xFF;
    float fBlue = (float)(uColor & 0xFF) / 0xFF;

    GLES20.glClearColor(fRed, fGreen, fBlue, fAlpha);

答案 2 :(得分:0)

这是我将颜色从HEX转换为glClearColor()格式的解决方案,该格式是0到1之间的浮点数。

首先我将颜色转换为RGB,然后将颜色从0映射到1。

/* re-map RGB colors so they can be used in OpenGL */
private float[] map(float[]rgb) {

    /* RGB is from 0 to 255 */
    /* THIS is from 0 to 1 (float) */

    // 1 : 2 = x : 4 >>> 2

    /*
    *
    * 240 : 255 = x : 1
    *
    * */

    float[] result = new float[3];
    result[0] = rgb[0] / 255;
    result[1] = rgb[1] / 255;
    result[2] = rgb[2] / 255;
    return result;
}

public float[] hextoRGB(String hex) {

    float[] rgbcolor = new float[3];
    rgbcolor[0] = Integer.valueOf( hex.substring( 1, 3 ), 16 );
    rgbcolor[1] = Integer.valueOf( hex.substring( 3, 5 ), 16 );
    rgbcolor[2] = Integer.valueOf( hex.substring( 5, 7 ), 16 );
    return map(rgbcolor);
}

用法:

    //0077AB is HEX color code
    float[] values = hextoRGB("#0077AB");

    GLES20.glClearColor(values[0], values[1], values[2], 1.0f);