CArchive 클래스에서 ReadString 사용이 궁금합니다.

조회수 638회

void CImageProDoc::LoadImageFile(CArchive& ar)

{ int i, maxValue; char type[16], buf[256]; CFile *fp = ar.GetFile(); CString fname = fp->GetFilePath();

if (strcmp(strrchr(fname, '.'), ".ppm") == 0 || strcmp(strrchr(fname, '.'), ".PPM") == 0 || strcmp(strrchr(fname, '.'), ".PGM") == 0 ||
strcmp(strrchr(fname, '.'), ".pgm") == 0 || strcmp(strrchr(fname, '.'), ".bmp") == 0)

{

ar.ReadString(type, 15);

  do {
     ar.ReadString(buf, 255);
  } while (buf[0] == '#');
  sscanf_s(buf, "%d %d", &imageWidth, &imageHeight);

  do {
     ar.ReadString(buf, 255);
  } while (buf[0] == '#');
  sscanf_s(buf, "%d", &maxValue);

  if (strcmp(type, "P5") == 0) depth = 1;
  else depth = 3;

}

위 코드는 CMF를 이용해서 영상처리를 할 때 PPM, PGM 파일의 헤더를 읽어서 영상의 가로 픽셀길이와 세로픽셀길이 그리고 영상이 흑백영상인지 컬러영상인지 확인해주는 코드인데요. CArchive 클래스 ar을 사용해서 ar.ReadString으로 문자열을 읽어오는 코드가 있습니다. ar.ReadString(type,15)가 어떻게 작동하는지 감이 안 잡힙니다. ar.ReadString(buf,255)도 마찬가지이구요. HxD 에디터로 pgm파일을 열어보면 16진법으로 50 35 0A 23 20 43 72 65 61 74 65 64 20 62 79 20 50 61 69 6E 74 20 53 68 6F 70 20 50 72 6F 0A 31 37 36 20 31 31 39 0A 32 35 35 0A 이런 식으로 파일 헤더를 갖는 것을 볼 수 있는데요. 이걸 해석 텍스트로 바꾸면

P5.# Created by Paint Shop Pro 176 119 255 이렇게 번역이 되어서 위 파일이 이진파일 PGM형식이고 176x119의 영상크기를 갖고 최대명암이 255라는 걸 알 수 있다는건데 ar.ReadString이 어떻게 이 헤더에서 영상크기와 P5를 읽어오는지 도통 이해가 되지 않습니다. 도와주세요...

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)