在应用程序的 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?
}
答案 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);