QOI ์ด๋ฏธ์ง€ ์••์ถ• ํฌ๋งท ๋„์ž…

์ƒˆ๋กœ์šด ๊ฒฝ๋Ÿ‰, ๋ฌด์†์‹ค ์ด๋ฏธ์ง€ ์••์ถ• ํ˜•์‹์ธ 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€