PGM पोर्टेबल ग्रे मैप है। यदि हम C में 2D ऐरे को PNG, JPEG, या किसी अन्य इमेज फॉर्मेट में इमेज के रूप में स्टोर करना चाहते हैं, तो हमें फाइल में लिखने से पहले डेटा को कुछ निर्दिष्ट फॉर्मेट में एन्कोड करने के लिए बहुत काम करना होगा।
Netpbm फॉर्मेट एक आसान और पोर्टेबल समाधान देता है। Netpbm ग्राफिक्स प्रोग्राम का एक ओपन सोर्स पैकेज है और यह मूल रूप से Linux या Unix प्लेटफॉर्म में उपयोग किया जाता है। यह Microsoft Windows सिस्टम के तहत भी काम करता है।
प्रत्येक फाइल दो-बाइट मैजिक नंबर से शुरू होती है। इस मैजिक नंबर का उपयोग फाइल के प्रकार की पहचान करने के लिए किया जाता है। प्रकार PBM, PGM, PPM आदि हैं। यह एन्कोडिंग (ASCII या बाइनरी) की भी पहचान करता है। मैजिक नंबर एक कैपिटल P होता है जिसके बाद एक सिंगल डिजिट नंबर होता है।
ASCII एन्कोडिंग मानव पठनीयता और अन्य प्लेटफॉर्म पर आसान ट्रांसफर की अनुमति देता है; बाइनरी फॉर्मेट फाइल आकार में अधिक कुशल है लेकिन इसमें नेटिव बाइट-ऑर्डर मुद्दे हो सकते हैं।
PGM फाइलें कैसे लिखें?
- मैजिक नंबर P2 सेट करें
- व्हाइटस्पेस जोड़ें (स्पेस, टैब्स, CRs, LFs)
- चौड़ाई जोड़ें, ASCII कैरेक्टर में डेसीमल के रूप में फॉर्मेटेड
- व्हाइटस्पेस जोड़ें
- ऊंचाई जोड़ें, ASCII कैरेक्टर में डेसीमल के रूप में फॉर्मेटेड
- व्हाइटस्पेस जोड़ें
- अधिकतम ग्रे वैल्यू डालें, फिर से ASCII डेसीमल में
- व्हाइटस्पेस जोड़ें
- चौड़ाई x ऊंचाई ग्रे वैल्यूज, प्रत्येक ASCII डेसीमल में (0 और अधिकतम वैल्यू के बीच रेंज), टॉप से बॉटम तक व्हाइटस्पेस से अलग
उदाहरण कोड
#include <stdio.h>
main() {
int i, j;
int w = 13, h = 13;
// यह 2D ऐरे इमेज में बदला जाएगा। आकार 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"); // बाइनरी मोड में फाइल लिखें
fprintf(pgmimg, "P2\n"); // फाइल में मैजिक नंबर लिखें
fprintf(pgmimg, "%d %d\n", w, h); // फाइल में चौड़ाई और ऊंचाई लिखें
fprintf(pgmimg, "255\n"); // अधिकतम ग्रे वैल्यू लिखें
int count = 0;
for (i = 0; i < h; i++) {
for (j = 0; j < w; j++) {
fprintf(pgmimg, "%d ", image[i][j]); // ऐरे से फाइल में ग्रे वैल्यू कॉपी करें
}
fprintf(pgmimg, "\n");
}
fclose(pgmimg);
}
PGM इमेज नीचे जैसी दिखती है
आउटपुट
