【发布时间】:2014-05-11 09:55:13
【问题描述】:
我有一个包含原始 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);
}
但格式无法识别。
【问题讨论】:
-
您看过 JPEG 规范吗?或者,如果您不想手动编码数据(我建议您不要这样做),
libjpeg是一个流行的选择。 -
Err... 除了整个“JPEG 格式”之外,您是否要制作一个像素高、X 像素宽的单个 JPEG?如果没有,JPEG 应该如何知道如何将像素线包装到图像中?
-
@meagar 不,这只是我要存储的数据的格式。
-
@TylerSebastian 这个问题没有意义。为什么你认为你需要一个“格式”?您是否正在尝试制作人们可以使用 JPEG 查看器查看的图像?您只是想存储一堆任意字节以供以后读取,还是想生成图像,在您的程序之外查看?
-
那么……你需要回答我的问题。您是否尝试生成 1 像素高的图像?或者你的图像有实际尺寸吗?如果它有尺寸,如果你只是在写一个表示 RGB 值的字节流,你如何期望 JPEG 知道如何计算出来?如果您写入 6 个字节,则可能是 1x6、2x3、3x2 或 6x1 图像。 JPEG 不能只知道,您必须提供该数据。