ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android上的颜色选择 – glReadPixels舍入错误

2019-07-01 00:13:44  阅读:308  来源: 互联网

标签:android opengl-es picking color-picker


我在android上使用opengl es中的颜色选择,我正在计算一个颜色键,将它与我从glReadPixels获得的值进行比较:

ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
PixelBuffer.order(ByteOrder.nativeOrder());
gl.glReadPixels(x, y, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
byte b[] = new byte[4];
PixelBuffer.get(b);
String key = "" + b[0] + b[1] + b[2];

可以使用以下任意颜色手动计算此键:

public static byte floatToByteValue(float f) {
    return (byte) ((int) (f * 255f));
}

首先,浮点值转换为intvalue然后castet到byte.浮点值描述颜色系列红绿蓝(从0.0f到1.0f).
示例:0.0f转换为255(现在为整数),然后从255转换为-1(以字节为单位)

这工作正常,但opengl似乎有时会出现舍入错误.例:

0.895 -> -28  and opengl returns -27
0.897 -> -28  and opengl returns -27
0.898 -> -28  and opengl returns -27
0.8985 -> -27 and opengl returns -27
0.899 -> -27  and opengl returns -26
0.9 -> -27    and opengl returns -26
0.91 -> -24   and opengl returns -24

也许我的计算方法不正确?有没有人知道如何避免这些偏差?

解决方法:

例如
如果设置红色浮点数(31/255),我认为转换是这样的.

如果颜色格式为RGB565(默认),则31(0001_1111)转换为3(0000_0011)

然后我们使用glReadPixels()来获取值

3(0000_0011)转换为24(0001_1000)

总之,如果你设置31为红色,你最终会得到24.

消除舍入误差的关键是从RGB565转换为RGB88的方法,你没有这样做.

你可以尝试一下.祝好运.

标签:android,opengl-es,picking,color-picker
来源: https://codeday.me/bug/20190630/1341539.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有