범례
- bpp : bytes per pixel
- Raw(x) : 실제 픽셀값
- Sub(x) : zlib 으로 decompress한 바이트배열의 값
- Prior(x) : 위쪽 스캔라인의 대응위치의 실제 변환된 RGB 값. x<0이면 0.
- Prior(x-bpp) : 위쪽 스캔라인의 대응위치 왼쪽의 실제 변환된 RGB 값. x<0이면 0.
Filter type 0 : None
Filter type 1 : Sub
Sub(x) = Raw(x) - Raw(x-bpp) 즉, Raw(x) = Sub(x) + Raw(x-bpp)
Filter type 2 : Up
Filter type 3 : Average
Filter type 4 : Paeth
Raw(x) = Paeth(x) + PaethPredictor(Raw(x-bpp), Prior(x), Prior(x-bpp))
function PaethPredictor (a,b,c)
begin
; a = left, b = above; c = upper left
p = a + b - c
pa = abs(p-a)
pb = abs(p-b)
pc = abs(p-c)
if pa <= pb and pa <= pc then a
else if pb <= pc then b
else c
PNGFileFormat