0

.ppm単純なパラメーターのセットから画像ファイルを作成するプロトタイプ コードが動作しています。

目的は、非常に大きな画像 (100000 * 100000 ピクセルのようなもの) を作成し、そこから大判レーザー プリンターで高解像度の壁紙を印刷することです。

私が抱えている問題は、高さ/幅が 22000 ピクセルを超えるとプログラムがクラッシュすることです。

私のプログラムでは、すべてのデータがdeque計算中に保存され、最後にdequeファイルにエクスポートされます。

プログラムは行ごとにデータを作成します。つまり、各行の後dequeに、画像の 1 行のデータセットが入力されます。

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);
}
4

0 に答える 0