类型'的例外情况;system.stackoverflowexception';是用OpenGL抛出的c#
我使用类型'的例外情况;system.stackoverflowexception';是用OpenGL抛出的c#,c#,opengl,C#,Opengl,我使用gl.ReadPixels()获取像素颜色,但我有一个问题,即在行“gl.ReadPixels”(x,y,1,1,OpenGL.gl\u RGB,OpenGL.gl\u FLOAT,pixels)处抛出了类型为“system.stackoverflowexception”的异常 你能帮我纠正那个错误吗 您有一个包含3个字节的数组,但您正在尝试读取3个(RGB)浮点值,即12个字节。将数组从byte类型更改为float类型 谢谢,glReadPixels需要的参数是byte[]pixels,
gl.ReadPixels()
获取像素颜色,但我有一个问题,即在行“gl.ReadPixels”(x,y,1,1,OpenGL.gl\u RGB,OpenGL.gl\u FLOAT,pixels)处抛出了类型为“system.stackoverflowexception”的异常代码>
你能帮我纠正那个错误吗 您有一个包含3个字节的数组,但您正在尝试读取3个(RGB)浮点值,即12个字节。将数组从byte类型更改为float类型 谢谢,glReadPixels需要的参数是byte[]pixels,我从OpenGL.GL\u FLOAT改为OpenGL.GL\u byte,但当时你不应该让字节数组大小为12并保持GL\u FLOAT。是这样吗?公共颜色getPixelColor(OpenGL,int x,int y){Color Color=new Color(0,0,0);float[]像素=新的float[12];gl.ReadPixels(x,y,1,1,OpenGL.gl_RGB,OpenGL.gl_float,pixels);Color.setColor(像素[0],像素[1],像素[2]);return color;}您说过参数是byte[],那么它应该是:byte[]像素=新字节[12]代码>。因为它是字节,所以在返回颜色之前,必须将它转换为浮点。是的,那么如何将字节数组像素转换为浮点呢?
public Color getPixelColor(OpenGL gl, int x, int y)
{
Color color = new Color(0, 0, 0);
byte[] pixels = new byte[3];
gl.ReadPixels(x, y, 1, 1, OpenGL.GL_RGB, OpenGL.GL_FLOAT, pixels);
int a = pixels[0], b = pixels[1], c = pixels[2];
color.setColor(pixels[0], pixels[1], pixels[2]);
}