เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบฎเบนเบšเบžเบฒเบš QOI เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบต

เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบเบฒเบ™โ€‹เบšเบตเบšโ€‹เบญเบฑเบ”โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบ™เป‰เบณโ€‹เปœเบฑเบโ€‹เป€เบšเบปเบฒโ€‹เปเบšเบšโ€‹เปƒเปเปˆโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบชเบนเบ™โ€‹เป€เบชเบโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เบณโ€‹เบชเบฐโ€‹เป€เปœเบต - QOI (เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบ—เบตเปˆโ€‹เบ‚เป‰เบญเบ™โ€‹เบ‚เป‰เบฒเบ‡โ€‹เบ”เบต), เป€เบŠเบดเปˆเบ‡โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบšเบตเบšโ€‹เบญเบฑเบ”โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เป„เบ”เป‰โ€‹เป„เบงโ€‹เบซเบผเบฒเบโ€‹เปƒเบ™โ€‹เบŠเปˆเบญเบ‡โ€‹เบชเบต RGB เปเบฅเบฐ RGBA. เป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฑเบšเบฎเบนเบšเปเบšเบš PNG, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เปเบšเบšเบเบฐเบ—เบนเป‰เบ”เบฝเบงเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบš QOI เปƒเบ™เบžเบฒเบชเบฒ C, เบ—เบตเปˆเบšเปเปˆเปƒเบŠเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ SIMD เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ›เบฐเบเบญเบš, เปเบกเปˆเบ™ 20-50 เป€เบ—เบปเปˆเบฒเปƒเบ™เบ„เบงเบฒเบกเป„เบงเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป„เบงเบเบงเปˆเบฒ libpng เปเบฅเบฐ stb_image libraries, เปเบฅเบฐ 3. -4 เป€เบ—เบปเปˆเบฒโ€‹เปƒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เป„เบงโ€‹เบเบฒเบ™โ€‹เบ–เบญเบ”โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹. เปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบšเบตเบšเบญเบฑเบ”, QOI เปเบกเปˆเบ™เบขเบนเปˆเปƒเบเป‰เบเบฑเบš libpng เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปˆเบงเบ™เปƒเบซเบเปˆ (เปƒเบ™เบšเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบกเบฑเบ™เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ, เปเบฅเบฐเปƒเบ™เบšเบฒเบ‡เบญเบฑเบ™เปเบกเปˆเบ™เบ•เปˆเปเบฒเบเบงเปˆเบฒ), เปเบ•เปˆเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบกเบฑเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒ stb_image (เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เป€เบ–เบดเบ‡ 20%).

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ‚เบญเบ‡ QOI เปƒเบ™ C เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆ 300 เป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”. เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบกเปˆเบ™เปเบˆเบเบขเบฒเบเบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” MIT. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบœเบนเป‰เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบเบฐเบ•เบทเบฅเบทเบฅเบปเป‰เบ™เป„เบ”เป‰เบเบฐเบเบฝเบกเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบ•เบปเบงเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เปƒเบ™เบžเบฒเบชเบฒ Go, Zig เปเบฅเบฐ Rust. เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบ Dominic Szablewski, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบเบกเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบงเบดเบ”เบตเป‚เบญ MPEG1. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเปเบšเบš QOI, เบœเบนเป‰เบ‚เบฝเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบฅเบฐเบ‡เปˆเบฒเบเบ”เบฒเบเบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” QOI เปเบกเปˆเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบฅเบฐเบญเบฝเบ”เปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” (O(n)). เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบซเบ™เบถเปˆเบ‡เบœเปˆเบฒเบ™ - เปเบ•เปˆเบฅเบฐ pixels เป„เบ”เป‰เบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปƒเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™ 4 เบงเบดเบ—เบต, เป€เบฅเบทเบญเบเป‚เบ”เบเบญเบตเบ‡เบ•เบฒเบกเบ„เปˆเบฒเบ‚เบญเบ‡ pixels เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบ–เป‰เบฒ pixel เบ–เบฑเบ”เป„เบ›เบเบปเบ‡เบเบฑเบ™เบเบฑเบšเบญเบฑเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบ™เบฑเบšเบเบฒเบ™เบŠเปเป‰เบฒเบ„เบทเบ™เบˆเบฐเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ–เป‰เบฒ pixels เบฅเบงเบ‡เบเบปเบ‡เบเบฑเบšเบซเบ™เบถเปˆเบ‡เปƒเบ™เบ„เปˆเบฒเปƒเบ™ 64 pixel buffer เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปˆเบฒเบˆเบฐเบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเป‚เบ”เบเบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบ 6-bit เบเบฑเบš pixel เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบ–เป‰เบฒเบชเบตเบ‚เบญเบ‡ pixels เบฅเบงเบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ, เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปเบกเปˆเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบชเบฑเป‰เบ™ (เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบตเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบš 2,4, 5 เปเบฅเบฐ XNUMX bits). เบ–เป‰เบฒเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰, เบ„เปˆเบฒ rgba เป€เบ•เบฑเบกเปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™