C ++ Erstelle PNG / Bitmap aus einem Array von Zahlen

So fand ich diesen Link zu meiner Frage, aber es ist für c #

Erstelle eine PNG aus einem Array von Bytes

Ich habe ein variables int-Array von Zahlen. ich werde es "pix []" nennen, denn jetzt kann es eine beliebige Größe von 3 bis 256 haben, später möglicherweise größer.

Was ich jetzt tun möchte, ist, es in ein Pixelbild umzuwandeln. Ich bin immer noch ein Noobin C ++, bitte entschuldigen Sie mich. Ich habe versucht, einige Bibliotheken herunterzuladen, die die Arbeit mit libpng erleichtern, aber sie scheinen nicht zu funktionieren (ubuntu, code :: blocks). Daher habe ich folgende Fragen:

1) Wie erstellt man eine neue Bitmap (welche Bibliotheken, welcher Befehl)?

2) Wie fülle ich es mit Informationen aus "pix []"?

3) Wie speichere ich es?

wenn es sich um eine erneute frage handelt, freue ich mich auch über einen link;)

Hier ist, was ich bisher ausgearbeitet habe, danke für Ihre Hilfe.

int main(){
 FILE *imageFile;
 int x,y,pixel,height=2,width=3;

 imageFile=fopen("image.pgm","wb");
 if(imageFile==NULL){
  perror("ERROR: Cannot open output file");
  exit(EXIT_FAILURE);
 }

 fprintf(imageFile,"P3\n");           // P3 filetype
 fprintf(imageFile,"%d %d\n",width,height);   // dimensions
 fprintf(imageFile,"255\n");          // Max pixel
  int pix[100] {200,200,200, 100,100,100, 0,0,0, 255,0,0, 0,255,0, 0,0,255};


       fwrite(pix,1,18,imageFile);


fclose(imageFile);
}

Ich habe nicht ganz verstanden, was es tut. Ich kann das Ausgabebild öffnen, aber es ist keine korrekte Darstellung des Arrays.

Wenn ich Dinge ändere, zum Beispiel ein zweidimensionales Array, dann sagt mir der Bildbetrachter "erwartet eine ganze Zahl" und zeigt mir kein Bild.

So weit, ist es gut. Da ich das Array vor dem Bild habe, habe ich eine Funktion erstelltaufrunden, um auf die nächste int-Zahl aufzurunden, da ich ein quadratisches Bild erstellen möchte.

int aufrunden (double h)
{
int i =h;
if (h-i == 0)
  {
  return i;
  }
else
  {
  i = h+1;
  return i;
  }
}

Diese Funktion wird bei der Erstellung des Bildes verwendet. Ist das Bild größer als die vom Array bereitgestellten Informationen a ist die Länge des Arrays)

double h;
h= sqrt(a/3.0);
int i = aufrunden(h);
FILE *imageFile;                           
int height=i,width=i;

Es kann nun vorkommen, dass das Array @ ia=24 long.aufrunden macht das Bild 3x3, so dass es 27 Werte hat ... was bedeutet, dass die Werte für 1 Pixel fehlen. Oder schlimmer ist es nura=23 long. Erstellt auch ein 3x3-Image.

Was wirdfwrite(pix,1,18,imageFile); In diese Pixel schreiben, um Informationen zu erhalten? Es wäre am besten, wenn die restlichen Werte nur 0 wären.

* edit egal, ich füge einfach 0 an das Ende des Arrays an, bis es das ganze Quadrat ausfüllt ... sorry

Antworten auf die Frage(6)

Ihre Antwort auf die Frage