如何通过stbi_write_png保存高清图片

问题描述

我使用 OpenGL 来模拟对象。并且使用stbi_write_png保存图片,但是图片大小只有200K多,放大后不是很清晰。所以想知道C++有没有其他保存高清图片方法代码。 我的代码显示如下:

int SaveScreenshot(const char *filename)
{
    GLint viewport[4];
    glGetIntegerv(GL_VIEWPORT,viewport);

    int x = viewport[0];
    int y = viewport[1];
    int width = viewport[2];
    int height = viewport[3];

    char *data = (char*)malloc((size_t)(width * height * 4)); // 3 components (R,G,B)

    if (!data)
        return 0;

    glPixelStorei(GL_PACK_ALIGNMENT,1);
    glreadPixels(x,y,width,height,GL_RGBA,GL_UNSIGNED_BYTE,data);
    stbi_flip_vertically_on_write(1);

    int saved = stbi_write_png(filename,4,data,0);

    free(data);

    return saved;
}

解决方法

几个选项:

  1. 渲染到比默认帧缓冲区更大的 FBO & glReadPixels()
  2. 渲染到 multiple tilesglReadPixels() 那些,最终通过拼接成单个更大的图像