首頁 >後端開發 >C++ >C程式以PGM格式寫入影像

C程式以PGM格式寫入影像

WBOY
WBOY轉載
2023-09-16 22:01:01817瀏覽

PGM 是隨身灰階地圖。如果我們想在 C 中將二維數組儲存為 PNG、JPEG 或任何其他圖像格式的圖像,則在寫入檔案之前,我們必須做大量工作以某種指定的格式對資料進行編碼。

Netpbm 格式提供了一個簡單且便攜的解決方案。 Netpbm是一個開源的圖形程式包,基本上是使用在linux或Unix平台上。它也可以在 Microsoft Windows 系統下運作。

每個檔案都以兩個位元組的幻數開頭。這個幻數用來識別檔案的類型。類型有 PBM、PGM、PPM 等。它還標識編碼(ASCII 或二進位)。幻數是大寫的 P 後面跟著一個數字。

ASCII 編碼允許人類可讀並輕鬆傳輸到其他平台;二進位格式在檔案大小方面更有效,但可能存在本機位元組順序問題。

如何寫 PGM 檔?

  • 設定幻數P2
  • 新增空格(空格、製表符、CR、LF)
  • 新增寬度,格式為十進位ASCII 字元
  • 新增空白
  • 新增高度,格式為十進位ASCII 字元
  • 新增空白
  • 輸入最大灰階值,同樣採用ASCII 十進位格式
  • 新增空格
  • 寬度x 高度灰階值,每個值均採用ASCII 十進位(範圍在0 到最大值之間),從上到下以空格分隔。

範例程式碼

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

PGM 映像如下所示

#輸出

C程式以PGM格式寫入影像

以上是C程式以PGM格式寫入影像的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除