Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C เขียนภาพในรูปแบบ PGM


PGM คือ Portable Grey Map หากเราต้องการจัดเก็บอาร์เรย์ 2d ใน C เป็นรูปภาพใน PNG, JPEG หรือรูปแบบภาพอื่น ๆ เราจะต้องทำงานมากมายเพื่อเข้ารหัสข้อมูลในรูปแบบที่ระบุก่อนที่จะเขียนลงในไฟล์

รูปแบบ Netpbm ให้โซลูชันที่ง่ายและพกพาสะดวก Netpbm เป็นแพ็คเกจโอเพ่นซอร์สของโปรแกรมกราฟิกและโดยทั่วไปจะใช้ในแพลตฟอร์ม linux หรือ Unix นอกจากนี้ยังทำงานภายใต้ระบบ Microsoft Windows

แต่ละไฟล์เริ่มต้นด้วยเลขมหัศจรรย์สองไบต์ หมายเลขเวทย์มนตร์นี้ใช้เพื่อระบุประเภทของไฟล์ ประเภทคือ PBM, PGM, PPM เป็นต้น นอกจากนี้ยังระบุการเข้ารหัส (ASCII หรือไบนารี) เลขวิเศษเป็นตัวพิมพ์ใหญ่ P ตามด้วยเลขหลักเดียว

การเข้ารหัส ASCII ช่วยให้มนุษย์สามารถอ่านได้และถ่ายโอนไปยังแพลตฟอร์มอื่นได้ง่าย รูปแบบไบนารีมีประสิทธิภาพมากกว่าในขนาดไฟล์ แต่อาจมีปัญหาเกี่ยวกับลำดับไบต์ดั้งเดิม

จะเขียนไฟล์ PGM ได้อย่างไร

  • ตั้งเลขมหัศจรรย์ P2
  • เพิ่มช่องว่าง (Space, Tabs, CRs, LFs)
  • เพิ่มความกว้าง จัดรูปแบบเป็นอักขระ 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);
}

ภาพ PGM มีลักษณะดังนี้

ผลลัพธ์

โปรแกรม C เขียนภาพในรูปแบบ PGM