Java 中读取缓冲区

发布于 2024-12-11 13:41:12 字数 646 浏览 0 评论 0 原文

我需要一些手来读取 android 的 opengl-es api 中的 glReadPixels 功能吐出的缓冲区。到目前为止,这是我的代码...

public static void pick(GL11 gl){
        int[] viewport = new int[4];
        IntBuffer pixel = IntBuffer.allocate(384000);

        mColourR = BaseObject.getColourR();
        mColourG = BaseObject.getColourG();
        mColourB = BaseObject.getColourB();

        x = MGLSurfaceView.X();
        y = MGLSurfaceView.Y();

        gl.glGetIntegerv(GL11.GL_VIEWPORT,viewport,0);

        gl.glReadPixels((int)x,viewport[3]-(int)y, 1, 1, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, pixel);


}

此代码中的输出缓冲区的名称是“像素”,我需要添加到此代码中才能从“像素”缓冲区获取颜色值。

I need a bit of a hand reading the buffer that is spat out by the glReadPixels feature in android's opengl-es api. Here is my code so far...

public static void pick(GL11 gl){
        int[] viewport = new int[4];
        IntBuffer pixel = IntBuffer.allocate(384000);

        mColourR = BaseObject.getColourR();
        mColourG = BaseObject.getColourG();
        mColourB = BaseObject.getColourB();

        x = MGLSurfaceView.X();
        y = MGLSurfaceView.Y();

        gl.glGetIntegerv(GL11.GL_VIEWPORT,viewport,0);

        gl.glReadPixels((int)x,viewport[3]-(int)y, 1, 1, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, pixel);


}

the name of the output buffer in this code is "pixel" what do I need to add to this code to get the colour values back from the "pixel" buffer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哆兒滾 2024-12-18 13:41:12

您可以使用 IntBuffer 的 >get() 方法 用于访问各个值。

RGB 颜色值通常按照该顺序存储,因此调用 pixel.get(0) 将获取第一个像素的红色值,pixel.get(1)会给你绿色通道等等。通常,这些值是按行存储的。

因此,如果您需要特定像素 (x,y) 的值,则必须调用 get(screenWidth*3*y + x)

顺便说一句,您可以检索原始 int 数组通过调用 pixels.array() 从您的 IntBuffer 中获取

You can use one of the get() methods of the IntBuffer to access individual values.

RGB color values are usually stored in that very order, so calling pixel.get(0) will get you the red value of the first pixel, pixel.get(1) will get you the green channel and so on. Usually, the values are stored line-wise.

So, if you need a value for a particular pixel, (x,y) you will have to call get(screenWidth*3*y + x)

By the way, you can retrieve the raw int array from your IntBufferby calling pixels.array()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文