Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android画布或opengl中绘制多个像素点?_Java_Android_Canvas_Opengl Es - Fatal编程技术网

Java 在android画布或opengl中绘制多个像素点?

Java 在android画布或opengl中绘制多个像素点?,java,android,canvas,opengl-es,Java,Android,Canvas,Opengl Es,我正在尝试实现自己的镜像协议。 我正在使用WebSocket检索压缩像素缓冲区。在我解压这个缓冲区之后,我得到了一个带有颜色的大数组,我应该显示它 我在onDraw中的一个巨大arraylist(200万个元素)上使用带有for循环的canvas,如下所示: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < this.pixelsList.si

我正在尝试实现自己的镜像协议。 我正在使用WebSocket检索压缩像素缓冲区。在我解压这个缓冲区之后,我得到了一个带有颜色的大数组,我应该显示它

我在onDraw中的一个巨大arraylist(200万个元素)上使用带有for循环的canvas,如下所示:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    for (int i = 0; i < this.pixelsList.size(); i++) { //SIZE = 2.073.600 pixels
        canvas.drawPoint(this.pixelsList.get(i).getPosition().x, this.pixelsList.get(i).getPosition().y, this.pixelsList.get(i).getPaint());
    }
}
@覆盖
受保护的void onDraw(画布){
super.onDraw(帆布);
对于(int i=0;i
我正在寻找一种有效的方式来显示这个巨大的数据包。
我使用的是OpenGL ES,但我没有找到任何方法在一个位置显示一个像素。。也许我应该看看OpenCV?

不要取消引用每个像素地址,在OpenGL中使用纹理。这可能是最快的方法

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture[texture_id].texture_width, texture[texture_id].texture_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelsList);
或者如果它经常更新

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE,  **pixelsList**);

最好是创建一个缓冲图像(将像素列表复制到光栅中),然后只绘制图像。是的,缓冲图像将为您解决大部分问题(或者至少应该如此)。您甚至可以使用parts if ImageIO进行压缩和数据传输。谢谢您的回答。你能给我一些BuffereImage的样品吗?如果我想在水面上画120万而不是20亿。我很害怕,对不起D后期编辑!非常感谢。是的,它会经常更新。我不理解这行代码:glTexImage2D(GL_纹理_2D,0,GL_RGBA,宽度,高度,0,GL_RGBA,GL_无符号_字节,0);我不能将0作为最后一个参数,它等待像素缓冲区。如何构建它?@DevAndroid在本例中,glTexSubImage2D的最后一个参数是image的地址。如果它是一个视频帧,因此必须更频繁地更新,那么您需要将PBO与glTexSubImage2D一起使用。它仍然不显示任何内容。我填写了一个像素为a、R、G、B的ByteBuffer对象,并在glTexImage2D中传递它。什么都没有出现。。。我可以给你看吗?@DevAndroid是的,请给我看。顺便问一下,你画了一个长方形吗?