Rumah >pembangunan bahagian belakang >C++ >Program C untuk menulis imej dalam format PGM

Program C untuk menulis imej dalam format PGM

WBOY
WBOYke hadapan
2023-09-16 22:01:01804semak imbas

PGM ialah Peta Skala Kelabu Mudah Alih. Jika kita ingin menyimpan tatasusunan 2D dalam C sebagai imej dalam PNG, JPEG atau mana-mana format imej lain, kita perlu melakukan banyak kerja untuk mengekod data dalam beberapa format tertentu sebelum menulis ke fail.

Format Netpbm menyediakan penyelesaian yang mudah dan mudah alih. Netpbm ialah pakej grafik sumber terbuka, pada asasnya digunakan pada platform Linux atau Unix. Ia juga berjalan di bawah sistem Microsoft Windows.

Setiap fail bermula dengan nombor ajaib dua bait. Nombor ajaib ini digunakan untuk mengenal pasti jenis fail. Jenis termasuk PBM, PGM, PPM, dll. Ia juga mengenal pasti pengekodan (ASCII atau binari). Nombor ajaib ialah huruf besar P diikuti dengan nombor.

Pengekodan ASCII membolehkan kebolehbacaan manusia dan pemindahan mudah ke platform lain adalah lebih cekap dari segi saiz fail, tetapi mungkin mempunyai masalah pesanan bait asli.

Bagaimana cara menulis fail PGM?

  • Set nombor sihir P2
  • add ruang (ruang, tab, cr, lf)
  • Add lebar, diformatkan sebagai aksara ascii perpuluhan
  • Add Whitespace
  • add Height, diformat sebagai aksara ascii perpuluhan
  • Add kosong
  • Masukkan nilai skala kelabu maksimum, juga dalam format perpuluhan ASCII
  • Tambah ruang
  • Nilai skala kelabu lebar x tinggi, setiap nilai adalah dalam perpuluhan ASCII (julat antara 0 dan nilai maksimum), dari atas ke bawah dipisahkan oleh ruang.

Contoh kod

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

Imej PGM ditunjukkan di bawah

Output

Program C untuk menulis imej dalam format PGM

Atas ialah kandungan terperinci Program C untuk menulis imej dalam format PGM. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam