[GD] gdImageAllocate gibt -1 zurück



  • Guten Mittag liebes Forum,

    momentan sitze ich an einem kleinen C++ Programm unter Linux welches diverse Grafikoperationen ausführt. An einer Stelle komme ich nun nicht weiter und finde das ganze etwas kurios - Da ich aber keine Idee habe was dort schief läuft, hoffte ich hier wüßte es evtl. jemand und daher meldete ich mich hier an. Also sage ich als erstes erst einmal: Hallo liebes Forum, ich bin der Neue 🙂

    Zu meiner eigentlichen Frage: Ich habe eine Schleife, die kann durchaus sehr groß sein , momentan ca. 8000 Durchgänge. In jedem dieser Durchgänge muss ich etwas in ein Bild zeichnen und benötige eine neue Farbe. Das ganze sieht ca. so aus:

    this->picture = new CQuadPicture();
    		this->picture->im = gdImageCreate(textureSize,textureSize);
    		gdImageSaveAlpha(this->picture->im,true);
    		int backgroundColor = gdImageColorAllocateAlpha(this->picture->im,  255,255,255,127);  						
    		gdImageFill(this->picture->im,0,0,backgroundColor);
    for (std::vector<CTyp>::iterator it=array.begin(); it!=array.end(); ++it)
    {
    this->picture->color = gdImageColorAllocateAlpha(this->picture->im,r,g,b,110);
    ....
    Zeichnen
    }
    FILE *pngout;
    ostringstream s;
    s.str("");
    s.clear();
    s<<"/srv/c++/tools_assetserver/cache/"<<query_id<<"_"<<tstamp<<"/"<<this->internQuadID <<".png";
    pngout = fopen(s.str().c_str(), "wb");
    gdImagePng(this->picture->im, pngout);
    gdImageDestroy(this->picture->im);
    fclose(pngout);
    

    So, die ersten 100 - 200 Farben werden richtig erstellt - Danach hat alles nur noch eine Farbe. Kann ich in einer Schleife nicht so viele Farben definieren wie ich will? Kann ich die Alte irgendwie aus dem Speicher löschen oder so? Denn ich brauche jeden Durchgang eine neue Farbe.

    Ich habe sogar schon probiert das Bild jedes mal im Schleifendurchgang neu einzulesen und wieder zu speichern, damit ich eben nur eine Farbe in den Speicher nehme - Aber der Fehler ist der selbe, davon ab das es ziemlicher Blödsinn ist 😃

    Hat jemand so etwas schon einmal gehabt? Kann ich die vorhandene Farbe evtl. überschreiben oder so?!

    Grüße und schon einmal vielen lieben Dank

    Stimpy



  • Hi,

    nach langem hin und her habe ich das Problem gefunden, falls also mal jemand zu wenig Farben mit der GD hat sollte er anstatt:

    gdImageCreate(textureSize,textureSize);
    

    doch irgendwie intelligenter Weise

    gdImageCreateTrueColor(textureSize,textureSize);
    

    machen 🙄 🤡

    Trotzdem Danke an alle die drüber nachgedacht haben 👍


Log in to reply