์๋ก์ด ๊ฒฝ๋, ๋ฌด์์ค ์ด๋ฏธ์ง ์์ถ ํ์์ธ QOI(Quite OK Image)๊ฐ ๋์ ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด RGB ๋ฐ RGBA ์์ ๊ณต๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์์ถํ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ PNG ํ์๊ณผ ๋น๊ตํ ๋ SIMD ๋ช ๋ น์ด ๋ฐ ์ด์ ๋ธ๋ฆฌ ์ต์ ํ๋ฅผ ์ฌ์ฉํ์ง ์๋ C ์ธ์ด์ QOI ํ์์ ๋จ์ผ ์ค๋ ๋ ์ฐธ์กฐ ๊ตฌํ์ libpng ๋ฐ stb_image ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ์ธ์ฝ๋ฉ ์๋๊ฐ 20~50๋ฐฐ ๋น ๋ฅด๋ฉฐ 3 -๋์ฝ๋ฉ ์๋๊ฐ 4๋ฐฐ ๋นจ๋ผ์ก์ต๋๋ค. ์์ถ ํจ์จ์ฑ ์ธก๋ฉด์์ QOI๋ ๋๋ถ๋ถ์ ํ ์คํธ์์ libpng์ ๊ฐ๊น์ง๋ง(์ผ๋ถ ํ ์คํธ์์๋ ์ฝ๊ฐ ์์๊ณ ๋ค๋ฅธ ํ ์คํธ์์๋ ์ด๋ฑํจ) ์ผ๋ฐ์ ์ผ๋ก stb_image๋ณด๋ค ๋์ ๋๊ฒ ์์ ์์ต๋๋ค(์ต๋ 20% ํฅ์).
C์์ QOI์ ์ฐธ์กฐ ๊ตฌํ์ ๋จ 300์ค์ ์ฝ๋์ ๋๋ค. ์์ค์ฝ๋๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ๋ํ ๋งค๋์๋ค์ Go, Zig ๋ฐ Rust ์ธ์ด๋ก ์ธ์ฝ๋ ๋ฐ ๋์ฝ๋ ๊ตฌํ์ ์ค๋นํ์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ MPEG1 ๋น๋์ค ๋์ฝ๋ฉ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ ๊ฒฝํ์ด ์๋ ๊ฒ์ ๊ฐ๋ฐ์์ธ Dominic Szablewski๊ฐ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ์ ์๋ QOI ํ์์ ์ฌ์ฉํ์ฌ ์ง๋์น๊ฒ ๋ณต์กํ ์ต์ ์ด๋ฏธ์ง ์ธ์ฝ๋ฉ ํ์์ ๋ํ ํจ๊ณผ์ ์ด๊ณ ๊ฐ๋จํ ๋์์ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์์ต๋๋ค.
QOI ์ฑ๋ฅ์ ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง์ ํด์๋ ๋ฐ ํน์ฑ(O(n))๊ณผ ๋ฌด๊ดํฉ๋๋ค. ์ธ์ฝ๋ฉ๊ณผ ๋์ฝ๋ฉ์ ํ ๋ฒ์ ์ํ๋ฉ๋๋ค. ๊ฐ ํฝ์
์ ํ ๋ฒ๋ง ์ฒ๋ฆฌ๋๋ฉฐ ์ด์ ํฝ์
์ ๊ฐ์ ๋ฐ๋ผ ์ ํ๋๋ 4๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ธ์ฝ๋ฉ๋ ์ ์์ต๋๋ค. ๋ค์ ํฝ์
์ด ์ด์ ํฝ์
๊ณผ ์ผ์นํ๋ฉด ๋ฐ๋ณต ์นด์ดํฐ๊ฐ ์ฆ๊ฐํฉ๋๋ค. ํฝ์
์ด ๊ณผ๊ฑฐ 64 ํฝ์
๋ฒํผ์ ๊ฐ ์ค ํ๋์ ์ผ์นํ๋ฉด ํด๋น ๊ฐ์ ๊ณผ๊ฑฐ ํฝ์
์ ๋ํ 6๋นํธ ์คํ์
์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ์ด์ ํฝ์
์ ์์์ด ์ฝ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ทธ ์ฐจ์ด๊ฐ ์งง์ ํ์(2,4, 5, XNUMX๋นํธ์ ๋ง๋ ์์ ๊ตฌ์ฑ ์์์ ์ฐจ์ด์ ๋ํ ์งง์ ์ธ์ฝ๋ฉ)์ผ๋ก ํ์๋ฉ๋๋ค. ์ต์ ํ๋ฅผ ์ ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ์ ์ฒด rgba ๊ฐ์ด ์ ๊ณต๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru