PGM 是隨身灰階地圖。如果我們想在 C 中將二維數組儲存為 PNG、JPEG 或任何其他圖像格式的圖像,則在寫入檔案之前,我們必須做大量工作以某種指定的格式對資料進行編碼。
Netpbm 格式提供了一個簡單且便攜的解決方案。 Netpbm是一個開源的圖形程式包,基本上是使用在linux或Unix平台上。它也可以在 Microsoft Windows 系統下運作。
每個檔案都以兩個位元組的幻數開頭。這個幻數用來識別檔案的類型。類型有 PBM、PGM、PPM 等。它還標識編碼(ASCII 或二進位)。幻數是大寫的 P 後面跟著一個數字。
ASCII 編碼允許人類可讀並輕鬆傳輸到其他平台;二進位格式在檔案大小方面更有效,但可能存在本機位元組順序問題。
如何寫 PGM 檔?
#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格式寫入影像的詳細內容。更多資訊請關注PHP中文網其他相關文章!