从GlreadPixels的结果中保存PNG
save png from the results of glReadPixels
在以前的问题1和2中,我有以下代码:
如何捕获屏幕:
int width = glutGet(GLUT_WINDOW_WIDTH);
int height = glutGet(GLUT_WINDOW_HEIGHT);
std::vector< unsigned char > rgbdata(4*width*height);
glReadPixels(0, 0, width, height,GL_RGBA,GL_UNSIGNED_BYTE, &rgbdata[0]);
int save_result = SOIL_save_image
(
filename,
SOIL_SAVE_TYPE_PNG,
width, height, 4,
rgbdata.data()
);
以及如何存储在PNG中:
#define png_infopp_NULL (png_infopp)NULL
#define int_p_NULL (int*)NULL
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_dynamic_io.hpp>
using namespace boost::gil;
int main()
{
rgb8_image_t img(512, 512);
rgb8_pixel_t red(255, 0, 0);
fill_pixels(view(img), red);
png_write_view("redsquare.png", const_view(img));
}
我想将捕获的屏幕保存到png
文件中。现在,问题是如何相互级联这些代码?这些阵列可转换吗?
谁知道?最好将图像传递给用C malloc分配的原始指针,这主要是因为人们为基本相同的数据类型创建别名,并且将模板陷入混乱。
选择RGB或RGBA作为内部格式。然后编写胶水代码以转换为第三库聚会所需的格式。在这种情况下,BOOST正在采用RGB8_IMAGE_T,该RGB8_IMAGE_T本身会创建。您不希望该符号在其他任何地方污染您的名称空间,除非您依赖Bool Gil来保存图像。因此,写一个包装器,然后用升压提出,直到格式正确为止。
如果您使用baby x文件保存例程,这些问题就会消失。这些例程采用未签名的char缓冲区,不要试图导出图像的数据类型。
https://github.com/malcolmmclean/babyxrc
(Lodepng不是我的,它是由Lode Vandevenne撰写的,所以请遵守许可要求。您可以用其他格式来完成您想要的,因为它们是由我撰写的)。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在C++中将类(带有Vector成员)保存为二进制文件
- C++.我想将更改后的特定字符行保存在字符串中
- 如何启用libMagick++以保存.png文件格式
- 从GlreadPixels的结果中保存PNG
- OPENCV IMWRITE保存黑色PNG
- 如何将 pcl::直方图保存为 PNG 或 JPG 文件
- 使用libCurl和GdkPixBuff将图像从JPEG保存为PNG
- 使用C++(VS 2010)FAST将BMP保存为PNG
- 需要从png文件中读取数据并将其保存到新文件中,如何?C++
- Boost::GIL如何将图像保存为JPEG或PNG为char*
- 使用cocos2d-x将精灵内容保存为.png文件
- 我如何将base64字符串保存为Qt中的png图像
- 如何将原始图像数据保存为png图像
- 将一组颜色数据保存为DS上的PNG文件