c++ - 如何通过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, width, height, 4, data, 0);
free(data);
return saved;
}
解决方案
几个选项:
- 渲染到大于默认帧缓冲区的 FBO
glReadPixels()
和 - 渲染到多个图块和
glReadPixels()
那些,最后通过缝合到单个更大的图像
推荐阅读
- python - 如何改进这个 webscraping python 脚本?
- javascript - 获取用户输入和输出 Flask 和 HTML
- laravel - Laravel 5.8 发送带有文件附件的电子邮件
- macos - 用于单个视图的 macOS SwiftUI 导航
- javascript - 是否可以访问类原型的属性?
- vim - 从插件或 vimrc 调用时的 getbufvar 函数返回空字符串
- c# - EF Core 导航属性自行加载
- nginx - NGINX HTTP 重定向到 HTTPS 失败:“return”指令中的参数数量无效
- node.js - 猫鼬创建的对象的值在 Nestjs 中返回未定义
- r - 对具有相同结构的多个数据集使用 lapply 和 for-loop 来提取和计算每个数据帧的值