Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी प्रोग्राम पीजीएम प्रारूप में एक छवि लिखने के लिए

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

पीजीएम छवि नीचे की तरह दिख रही है

आउटपुट

सी प्रोग्राम पीजीएम प्रारूप में एक छवि लिखने के लिए


  1. 24 घंटे के प्रारूप को 12 घंटे में बदलने के लिए जावास्क्रिप्ट प्रोग्राम

    जावास्क्रिप्ट में 24 घंटे के प्रारूप को 12 घंटे में बदलने के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />

  1. पॉइंटर्स पर उदाहरण प्रदर्शित करते हुए एक सी प्रोग्राम लिखें

    पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल के एड्रेस को स्टोर करता है। पॉइंटर्स की विशेषताएं पॉइंटर मेमोरी स्पेस को बचाता है। मेमोरी लोकेशन तक सीधी पहुंच के कारण पॉइंटर का निष्पादन समय तेज होता है। पॉइंटर्स की मदद से, मेमोरी को कुशलता से एक्सेस किया जाता है, यानी मेमोरी आवंटित की जाती है और गतिश

  1. सरणी को उलटने के लिए C प्रोग्राम लिखें

    एक सरणी संबंधित वस्तुओं का एक समूह है जो एक सामान्य नाम से संग्रहीत होता है। सिंटैक्स एक सरणी घोषित करने के लिए सिंटैक्स इस प्रकार है - datatype array_name [size]; आरंभीकरण घोषणा के समय एक ऐरे को भी इनिशियलाइज़ किया जा सकता है - int a[5] = { 10,20,30,40,50}; सी में उलटा सरणी हम स्वैपिंग तकनीक क