Большой набор данных: записывать данные в файл постепенно? или постоянно?
У меня есть рабочий прототип-код, который создает .ppm
файл изображения из набора простых параметров.
Цель состоит в том, чтобы создать очень большую картинку (что-то вроде 100000 * 100000 пикселей) и распечатать обои с высоким разрешением из нее на широкоформатном лазерном принтере.
проблема в том, что моя программа падает, когда высота / ширина превышает 22000 пикселей.
В моей программе все данные хранятся в deque
во время вычислений, то в конце deque
экспортируется в файл.
Программа создает данные построчно, т. Е. После каждой строки deque
заполняется набором данных для одной строки изображения.
Можно ли написать deque
в файле каждый раз, когда строка была обработана, а затем очистите deque
перед началом следующего??
вот мой код:
#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 = 22000; //width & height
double h = 22000;
//double u = 1; // UNIT
double D = 0; // GAMMA
double E = 0; // ERREUR LOCALE
vector <double> F; // ERREUR DYNAMIQUE
int main ()
{
// vector
deque <int> dequeA;
F.push_back (0);
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.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);
}