Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

PGM 형식으로 이미지를 작성하는 C 프로그램

<시간/>

PGM은 휴대용 회색 지도입니다. C에서 2차원 배열을 PNG, JPEG 또는 기타 이미지 형식의 이미지로 저장하려면 파일에 쓰기 전에 데이터를 특정 형식으로 인코딩하기 위해 많은 작업을 해야 합니다.

Netpbm 형식은 쉽고 휴대 가능한 솔루션을 제공합니다. Netpbm은 그래픽 프로그램의 오픈 소스 패키지이며 기본적으로 Linux 또는 Unix 플랫폼에서 사용됩니다. Microsoft Windows 시스템에서도 작동합니다.

각 파일은 2바이트 매직 넘버로 시작합니다. 이 매직 넘버는 파일 유형을 식별하는 데 사용됩니다. 유형은 PBM, PGM, PPM 등입니다. 또한 인코딩(ASCII 또는 바이너리)을 식별합니다. 매직넘버는 대문자 P 다음에 한자리 숫자가 옵니다.

ASCII 인코딩을 통해 사람이 쉽게 읽을 수 있고 다른 플랫폼으로 쉽게 전송할 수 있습니다. 바이너리 형식은 파일 크기가 더 효율적이지만 기본 바이트 순서 문제가 있을 수 있습니다.

PGM 파일은 어떻게 작성하나요?

  • 매직 넘버 P2 설정
  • 공백 추가(공백, 탭, CR, LF)
  • 10진수로 된 ASCII 문자 형식의 너비 추가
  • 공백 추가
  • 10진수로 된 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 이미지는 아래와 같습니다.

출력

PGM 형식으로 이미지를 작성하는 C 프로그램