我有一个包含原始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);
}
但格式未被识别。
答案 0 :(得分:1)
如果您尝试制作图片文件,可以查看Netpbm。您可以相当简单地编写中间格式(PBM或PAM)。然后有大量已编写的程序将从您的中间文件中生成许多类型的图像。
答案 1 :(得分:0)
JPEG比原始RBG值复杂得多。您将需要使用库(如LIBJPEG)将数据存储为JPEG。
如果您自己编写,则必须:
答案 2 :(得分:0)
您可以使用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
。)
请务必将您的计划与-ljpeg
。