作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试检测光标下的 opengl 对象...我已阅读它被称为采摘。这是我的代码:
public int makeBuffer(GL10 gl, int x, int y) {
ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
PixelBuffer.order(ByteOrder.nativeOrder());
PixelBuffer.position(0);
int mTemp = 0;
gl.glReadPixels((int)x, (int) y, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
Log.e("Picking", " xy: x" + x + " y"+ y);
byte b [] = new byte[4];
PixelBuffer.get(b);
Log.e("Picking", " rgba: r"+ PixelBuffer.get(0) + " g" + PixelBuffer.get(1) + " b" +
PixelBuffer.get(2) + " a" + PixelBuffer.get(3));
Log.e("Picking", " rgba: r"+ b[0] + " g" + b[1] + " b" +
b[2] + " a" + b[3]);
//mTemp = PixelBuffer.get(0);
mTemp = b[0];
Log.e("Picking", "result:" + mTemp );
return mTemp;
}
看到上面大部分代码都是logcat语句。我的代码打印将 r、g 和 b 归零到屏幕。对于 alpha,它打印 '-1' 这是可翻译为 255(无符号)作为“完整 alpha”。我正在尝试检测屏幕上给定 x/y 位置的颜色。我会很高兴介于 1 和 15 之间的红色值,因为这是应该低于触摸。我希望如果我这样做完全错误我会得到全零,但我必须至少这样做部分正确,因为我正在获得 alpha。我还在其中包含了行我的 list 告诉手机我使用的权限“表面抛物线”和“读取帧缓冲区”。不知道这些有没有线路正常。
<uses-permission
android:name="android.permission.ACCESS_SURFACE_FLINGER" />
<uses-permission android:name="android.permission.READ_FRAME_BUFFER" /
如有任何帮助,我们将不胜感激。
最佳答案
我在 android 上创建 openGL ES 应用程序时也遇到了类似的问题。
到目前为止,我的解决方法是将应用程序从 RGB565 更改为 RGBA8888。在设置渲染器之前插入这些行:
getHolder().setFormat(PixelFormat.RGBA_8888);
setEGLConfigChooser(8, 8, 8, 8, 0, 0);
您必须知道此解决方案仅适用于支持 RGBA8888 的设备。
关于android - 如何在 android 中使用 glreadpixels——通常得到零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802266/
我是一名优秀的程序员,十分优秀!