== 파일 구조 ==
 PNG 파일은 PNG 시그너처와 여러개의 chunk로 이루어짐.

=== 1. PNG file 시그너처 ===
 * PNG파일의 처음 8바이트는 다음의 십진 값들로 시작.
  {{{
137 80 78 71 13 10 26 10
  }}}

=== 2. Chunk Layout ===
 * 각 chunk는 네 부분으로 나뉘어진다.
  * Length : 4바이트. Length, Chunk Type, CRC 길이는 포함되지 않은 값이다.
  * Chunk Type : 4바이트. 반드시 알파벳이어야 함(편리함. 가독성을 위해). 엔코더, 디코더는 이 값을 이진 값으로 인지.
  * Chunk Data : Type 에 따른 데이터. 길이가 0일수 있음.
  * CRC : Chunk Type + Chunk Data 에 대한 4 바이트 CRC 값.

=== 3. Chunk 이름짓기 규칙 ===
=== 4. CRC 알고리즘 ===
=== 5. Chunk Spec. ===
 * 제일 처음에는 IHDR chunk가 오는데, 다음의 요소로 이루어져 있다.
  * Width : 픽셀단위의 이미지 너비
  * Height : 픽셀단위의 이미지 높이
  * Bit depth : 하나의 샘플(픽셀과는 다른개념)당 또는 파레트 인덱스당 쓰이는 비트의 수
  * Compression method : 이미지 데이터를 압축하는데 쓰는 방법
  * Filter method : 이미지 데이터에 대한 전처리 방법. Compression과 관련.
  * Interlace method : 이미지에 대한 비트오더.
   || Color Type || Allowed Bit Depths || Interpretation ||
   || 0          || 1,2,4,8,16         || Each pixel is a grayscale sample. ||
   || 2          || 8, 16              || Each pixel is an R, G, B triple. ||
   || 3          || 1, 2, 4, 8         || Each pixel is a palette index; a PLTE chunk must appear. ||
   || 4          || 8, 16              || Each pixel is a grayscle sample, followed by an alpha sample. ||
   || 6          || 8, 16              || Each pixel is an R, G, B triple, followed by an alpha sample. ||

 * PLTE chunk : 256개의 엔트리를 갖음. R, G, B 색상)
 * IDAT chunk : 실제 픽셀값. IDAT는 여러개가 올 수 있다. (see also [PNGFileFormat/ImageData])
 * IEND chunk : 반드시 이 chunk 로 끝나야 함. Data 길이는 0.

=== Summary ===
 || Name     || 여러개 허용?   || 파일상의 위치 제약   ||
 || IHDR     || x              || 반드시 제일 앞에 와야함 (처음의 8비트 제외) ||
 || PLTE     || x              || IDAT전에 와야함      ||
 || IDAT     || o              || 여러개가 사용된다면 반드시 연속적이어야 함 ||
 || IEND     || x              || 반드시 제일 끝에 와야 함 ||
----
[PNGFileFormat]