【发布时间】:2011-10-11 17:59:24
【问题描述】:
我正在尝试检测光标下的 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 之间,因为那是 应该在触摸之下。我希望如果我这样做 完全错误我会得到全零,但我至少必须这样做 部分正确,因为我正在获得阿尔法。我还在 我的清单告诉手机我使用权限 “表面抛掷器”和“读取帧缓冲区”。不知道这些是不是 线路正常。
<uses-permission
android:name="android.permission.ACCESS_SURFACE_FLINGER" />
<uses-permission android:name="android.permission.READ_FRAME_BUFFER" /
任何帮助将不胜感激。
【问题讨论】:
-
我相信我的问题是我将错误的 y 值传递给函数。事实证明,opengl 期望值从底部增加,而 android 提供从顶部增加的值。
-
所以...这真的有效吗?它只是 Y 反转,你得到的是像素颜色?
-
嗨!我在这里有同样的问题:stackoverflow.com/questions/7488197/…。似乎我和你做的一样,但我一直得到红色的 -1 值(而不是 128-130 之间的数字)如果你能通过那个线程来看看我的代码,我将不胜感激。我看不出有什么区别,你说现在你可以正常工作了。提前致谢!
标签: android opengl-es glreadpixels