我在C楼我第一次节目++一遍又一遍。
该方案旨在创建图像, 梯度 -随高度的参数h
,宽度l
,在像素和4个参数密度Da, Db, Dc, Dd
。 这种梯度是通过“1位”像素产生:它们是黑色或白色 - 并且通过简单的误差扩散算法(所谓的“幼稚”有时),
>> push the error on the next pixel of the line.
已经进行的优化之后( deque
,而不是vector
。允许前要创建更大的图片),我坚持,我不能现在解决问题:
被存储在我的像素值的deque
,我该如何运送他们到一个位图文件?
我试着去了解EasyBMP
库,但我无法找到解决方案。
在我的代码,你可以看到line 33
,我试图(失败)做出.PBM头(便携位图)
其实,我想复制我的价值观deque <int> dequeA;
(第30行)到一个.BMP
文件或任何其它光栅文件格式,而不是在一个.txt
文件像它发生线72!
这里是我的代码,它使什么漂亮的图片:
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
#include <iterator>
#include <cstdlib>
#include <string>
#include <sstream>
using namespace std;
// constant values
double Da=1; //densities
double Db=0.5;
double Dc=0.5;
double Dd=0;
double l = 999; //width & height => L = l+1 /// 999 = 1000 pixels
double h = 999;
//double u = 1; // UNIT
double D = 0; // GAMMA
double E = 0; // ERROR LOCAL
vector <double> F; // ERROR DYNAMIC
int main ()
{
// vector
deque <int> dequeA;
F.push_back (0);
//dequeA.push_back (2); //FAKE PBM header (old)
//dequeA.push_back (l+1);
//dequeA.push_back (h+1);
//dequeA.push_back (1);
float a = 0;
float b = 0; // Local variables
double IO = 0; // variable I/O
while (a<l+1, b<h+1){
//values for given a & b
double DL = Da-Da*(b/h)+Dc*(b/h);
double DR = Db-Db*(b/h)+Dd*(b/h);
double D = DL-DL*(a/l)+DR*(a/l); //GAMMA
if (E+0-D<=-0.5) {
dequeA.push_back(1);
IO = 1;
}
else {
dequeA.push_back(0);
IO = 0;
}
E = E+IO-D;
F.push_back(E);
// next pixel & next line
a++;
if (a>l) {
a = 0;
b = b++;
E = 0;
F.clear();
}
}
//export values to .txt file
ofstream output_file("./test.txt");
ostream_iterator<int> output_iterator(output_file, "\n");
copy(dequeA.begin(), dequeA.end(), output_iterator);
dequeA.clear();
}