C ++ cria png / bitmap a partir da matriz de números

Então, eu encontrei este link sobre a minha pergunta, mas é para c #

Crie um PNG a partir de uma matriz de bytes

Eu tenho uma variável int matriz de números. Vou chamá-lo de "pix []", por enquanto pode ter qualquer tamanho de 3 a 256, mais tarde possivelmente maior.

O que eu quero fazer agora é convertê-lo em uma imagem de pixel. Eu ainda sou um noobin c ++, então desculpe-me. Tentei baixar algumas bibliotecas que facilitam o trabalho com a libpng, mas elas não parecem funcionar (ubuntu, code :: blocks). Portanto, tenho perguntas a seguir:

1) como você cria um novo bitmap (quais bibliotecas, qual comando)?

2) como preenchê-lo com informações de "pix []"?

3) como faço para salvá-lo?

se for um repost de uma pergunta, também estou feliz com um link;)

Aqui está o que eu resolvi até agora, obrigado por sua ajuda.

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

eu não entendi completamente o que ele faz. Eu posso abrir a imagem de saída, mas não é uma representação correta da matriz.

Se eu mudar as coisas, por exemplo, criando uma matriz bidimensional, o visualizador de imagens me diz "esperava um número inteiro" e não me mostra uma imagem.

Por enquanto, tudo bem. Como eu tenho a matriz antes da imagem eu criei uma funçãoaufrunden para arredondar para o próximo número int porque eu quero criar uma imagem quadrada.

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

Esta função é usada na criação da imagem. Se a imagem for maior que as informações fornecidas pelo array desta maneira (a é o comprimento da matriz)

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

Pode acontecer agora, que a matriz sejaa=24 longo.aufrunden faz com que a imagem 3x3 tenha 27 valores ... o que significa que estão faltando os valores de 1 pixel. Ou pior, é apenasa=23 longo. também criando uma imagem 3x3.

O que iráfwrite(pix,1,18,imageFile); escrever nesses pixels para obter informações? Seria melhor se os valores restantes fossem apenas 0.

* edite não importa, vou adicionar 0 ao final da matriz até que ela preencha todo o quadrado ... desculpe

questionAnswers(3)

yourAnswerToTheQuestion