我正在一遍又一遍地用C ++构建我的第一个程序。
该程序旨在创建一个图片,渐变 - 参数高度为h
,宽度为l
(以像素为单位),以及4个密度参数{{1 }}。
这个梯度由'1位'像素产生:它们是黑色或白色 - 并且通过最简单的误差扩散算法(有时也称为“天真”),
Da, Db, Dc, Dd
执行优化后(>> push the error on the next pixel of the line.
而不是deque
允许为ex创建更大的图片),我遇到了一个我现在无法解决的问题:
我的像素值存储在vector
中,如何将它们传输到位图文件中?
我试图了解deque
库但我找不到解决方案。
在我的代码中,您可以看到我尝试(失败)的EasyBMP
来制作.PBM标头(便携式位图)
实际上,我想复制line 33
的值(第30行)
到deque <int> dequeA;
文件或任何其他光栅文件格式,而不是在.BMP
文件中,如第72行所示!
这是我的代码,以及它的成果:
.txt
答案 0 :(得分:1)
PBM文件非常易于创建,应该足以满足您的需要。无需使用外部库。
原始代码中的一个问题是您将PBM元数据和实际图像数据存储在同一dequeA
中。不要那样做。混合这样的数据会使您的程序难以理解和维护。
您可以通过稍微调整编写文件的代码来创建有效的PBM文件:
ofstream output_file("./test.ppm");
// write file header
output_file << "P1\n" << (l+1) << " " << (h+1) << "\n";
//write image data
ostream_iterator<int> output_iterator(output_file, "\n");
copy(dequeA.begin(), dequeA.end(), output_iterator);
生成的PPM文件可以正常使用Gimp。
写入BMP或TGA文件的工作方式基本相同 - 首先编写标题,然后写入实际数据。主要区别在于这些文件格式是二进制文件,因此文件I / O看起来有点不同,标题和图像数据格式稍微复杂一些。但是,即使不使用库,这两种格式都非常简单易读。