【问题标题】:exception of type 'system.stackoverflowexception' was thrown c# with OpenGL'system.stackoverflowexception' 类型的异常在 c# 中被 OpenGL 抛出
【发布时间】:2019-04-19 08:15:24
【问题描述】:
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]);              
}     

我使用gl.ReadPixels() 来获取像素颜色,但我遇到了exception of type 'system.stackoverflowexception' was thrown at line 'gl.ReadPixels(x, y, 1, 1, OpenGL.GL_RGB, OpenGL.GL_FLOAT, pixels); 的问题。

你能帮我解决这个错误吗?

【问题讨论】:

    标签: c# opengl


    【解决方案1】:

    您有一个包含 3 个字节的数组,但您正在尝试读取 3 个 (RGB) 浮点数,即 12 个字节。将数组从字节类型更改为浮点类型。

    【讨论】:

    • 谢谢,glReadPixels 需要参数是 byte[] 像素,我从 OpenGL.GL_FLOAT 更改为 OpenGL.GL_BYTE 但没有
    • 那么你应该让你的字节数组大小为 12 并保持 GL_FLOAT。
    • 是那个?公共颜色 getPixelColor(OpenGL gl, int x, int y) { 颜色颜色 = 新颜色 (0, 0, 0);浮动[]像素=新浮动[12]; gl.ReadPixels(x, y, 1, 1, OpenGL.GL_RGB, OpenGL.GL_FLOAT, 像素); color.setColor(像素[0], 像素[1], 像素[2]);返回颜色; }
    • 你说参数是byte[],那么应该是:byte[] pixels = new byte[12];。而且因为它是字节,所以在返回颜色之前,您必须将其转换为浮点数。
    • 是的,那么如何将字节数组像素转换为浮点数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多