PGM पोर्टेबल ग्रे मैप है। अगर हम पीएनजी, जेपीईजी, या किसी अन्य छवि प्रारूप में छवियों के रूप में सी में 2 डी सरणी स्टोर करना चाहते हैं, तो हमें फ़ाइल में लिखने से पहले डेटा को कुछ निर्दिष्ट प्रारूप में एन्कोड करने के लिए बहुत काम करना होगा।
नेटपीबीएम प्रारूप एक आसान और पोर्टेबल समाधान देता है। नेटपीबीएम ग्राफिक्स प्रोग्राम का एक ओपन सोर्स पैकेज है और इसका उपयोग मूल रूप से लिनक्स या यूनिक्स प्लेटफॉर्म में किया जाता है। यह माइक्रोसॉफ्ट विंडोज सिस्टम के तहत भी काम करता है।
प्रत्येक फ़ाइल दो-बाइट मैजिक नंबर से शुरू होती है। इस मैजिक नंबर का उपयोग फाइल के प्रकार की पहचान करने के लिए किया जाता है। पीबीएम, पीजीएम, पीपीएम आदि प्रकार हैं। यह एन्कोडिंग (एएससीआईआई या बाइनरी) की भी पहचान करता है। मैजिक नंबर एक कैपिटल P होता है जिसके बाद सिंगल डिजिट नंबर होता है।
एएससीआईआई एन्कोडिंग मानव पठनीयता और अन्य प्लेटफार्मों पर आसान हस्तांतरण की अनुमति देता है; बाइनरी प्रारूप फ़ाइल आकार में अधिक कुशल है लेकिन इसमें मूल बाइट-ऑर्डर समस्याएं हो सकती हैं।
पीजीएम फाइलें कैसे लिखें?
- मैजिक नंबर P2 सेट करें
- व्हाट्सएप जोड़ें (स्पेस, टैब, सीआर, एलएफ)
- चौड़ाई जोड़ें, दशमलव में 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\n"); // Writing Magic Number to the File
fprintf(pgmimg, "%d %d\n", w, h); // Writing Width and Height into the
file
fprintf(pgmimg, "255\n"); // 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, "\n");
}
fclose(pgmimg);
} पीजीएम छवि नीचे की तरह दिख रही है
आउटपुट
