[英]Raw RGB values to JPEG
我有一个带有原始RGB值的数组,我需要将这些值写入JPEG文件。 是否有捷径可寻?
我试过了:
std::ofstream ofs("./image.JPG", std::ios::out | std::ios::binary);
for (unsigned i = 0; i < width * height; ++i) {
ofs << (int)(std::min(1.0f, image[i].x) * 255) << (int)(std::min(1.0f, image[i].y) * 255) << (int)(std::min(1.0f, image[i].z) * 255);
}
但格式无法识别。
如果您尝试生成图像文件,则可以查看Netpbm 。 您可以很简单地根据现有内容编写中间格式(PBM或PAM)。 这样,就会有大量已经编写好的程序,这些程序将从您的中间文件生成许多类型的图像。
哇!
JPEG比原始RBG值复杂得多。 您将需要使用LIBJPEG之类的库来将数据存储为JPEG。
如果您自己编写,则必须:
您可以使用Boost GIL :它是免费的,可移植的(它是Boost库的一部分),可在各种操作系统(包括Windows)中使用。
流行的Linux和Unix发行版(例如Fedora,Debian和NetBSD)都包含预构建的Boost软件包。
代码很简单:
#include <boost/gil/extension/io/jpeg_io.hpp>
const unsigned width = 320;
const unsigned height = 200;
// Raw data.
unsigned char r[width * height]; // red
unsigned char g[width * height]; // green
unsigned char b[width * height]; // blue
int main()
{
boost::gil::rgb8c_planar_view_t view =
boost::gil::planar_rgb_view(width, height, r, g, b, width);
boost::gil::jpeg_write_view("out.jpg", view);
return 0;
}
jpeg_write_view将当前实例化的视图保存到名称指定的jpeg文件中(如果创建std::ios_base::failure
则抛出std::ios_base::failure
)。
请记住将您的程序与-ljpeg
链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.