Maison >développement back-end >C++ >Programme C pour écrire une image au format PGM

Programme C pour écrire une image au format PGM

WBOY
WBOYavant
2023-09-16 22:01:01804parcourir

PGM est une carte portable en niveaux de gris. Si nous voulons stocker un tableau 2D en C sous forme d'image au format PNG, JPEG ou tout autre format d'image, nous devons faire beaucoup de travail pour encoder les données dans un format spécifié avant d'écrire dans le fichier.

Le format Netpbm offre une solution simple et portable. Netpbm est un package graphique open source, essentiellement utilisé sur les plateformes Linux ou Unix. Il fonctionne également sous les systèmes Microsoft Windows.

Chaque fichier commence par un nombre magique de deux octets. Ce numéro magique est utilisé pour identifier le type de fichier. Les types incluent PBM, PGM, PPM, etc. Il identifie également l'encodage (ASCII ou binaire). Un nombre magique est un P majuscule suivi d'un nombre.

L'encodage ASCII permet une lisibilité humaine et un transfert facile vers d'autres plates-formes ; le format binaire est plus efficace en termes de taille de fichier, mais peut présenter des problèmes d'ordre natif des octets.

Comment écrire un fichier PGM ?

  • Définir le nombre magique P2
  • Ajouter des espaces (espace, tabulation, CR, LF)
  • Ajouter une largeur, formatée en caractères décimaux ASCII
  • Ajouter des espaces
  • Ajouter une hauteur, formatée en caractères décimaux ASCII
  • ajouter un blanc
  • Entrez la valeur maximale en niveaux de gris, également au format décimal ASCII
  • Ajoutez un espace
  • Valeur en niveaux de gris largeur x hauteur, chaque valeur est en décimal ASCII (plage entre 0 et la valeur maximale), séparée de haut en bas par des espaces.

Exemple de code

#include <stdio.h>
main() {
   int i, j;
   int w = 13, h = 13;
   // This 2D array will be converted into an image The size is 13 x 13
   int image[13][13] = {
      { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
      { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31},
      { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47},
      { 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63},
      { 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79},
      { 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95 },
      { 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111},
      { 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127},
      { 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143},
      { 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159},
      { 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175},
      { 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191},
      { 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207}
   };
   FILE* pgmimg;
   pgmimg = fopen("my_pgmimg.pgm", "wb"); //write the file in binary mode
   fprintf(pgmimg, "P2</p><p>"); // Writing Magic Number to the File
   fprintf(pgmimg, "%d %d</p><p>", w, h); // Writing Width and Height into the
   file
   fprintf(pgmimg, "255</p><p>"); // Writing the maximum gray value
   int count = 0;
   for (i = 0; i < h; i++) {
      for (j = 0; j < w; j++) {
         fprintf(pgmimg, "%d ", image[i][j]); //Copy gray value from
         array to file
      }
      fprintf(pgmimg, "</p><p>");
   }
   fclose(pgmimg);
}

L'image PGM est affichée ci-dessous

Sortie

Programme C pour écrire une image au format PGM

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer