ΠΠΎΠ²Π΅Π΄Π΅Π½ Π΅ Π½ΠΎΠ² Π»Π΅ΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠΈ Π±Π΅Π· Π·Π°Π³ΡΠ±ΠΈ - QOI (Π‘ΠΎΡΠ΅ΠΌΠ° Π²ΠΎ ΡΠ΅Π΄ ΡΠ»ΠΈΠΊΠ°), ΠΊΠΎΡ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ Π±ΡΠ·ΠΎ Π΄Π° Π³ΠΈ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°ΡΠ΅ ΡΠ»ΠΈΠΊΠΈΡΠ΅ Π²ΠΎ ΠΏΡΠΎΡΡΠΎΡΠΈΡΠ΅ Π·Π° Π±ΠΎΠΈ RGB ΠΈ RGBA. ΠΠΎΠ³Π° ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°Π°Ρ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ ΡΠΎ ΡΠΎΡΠΌΠ°ΡΠΎΡ PNG, ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΠΎ Π΅Π΄Π½Π° Π½ΠΈΡΠΊΠ° Π½Π° ΡΠΎΡΠΌΠ°ΡΠΎΡ QOI Π²ΠΎ ΡΠ°Π·ΠΈΠΊΠΎΡ C, ΠΊΠΎΡ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈ SIMD ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅, Π΅ 20-50 ΠΏΠ°ΡΠΈ ΠΏΠΎΠ±ΡΠ·Π° Π²ΠΎ Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ ΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ libpng ΠΈ stb_image, ΠΈ 3 -4 ΠΏΠ°ΡΠΈ ΠΏΠΎΠ±ΡΠ·ΠΎ Π²ΠΎ Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅. ΠΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°, QOI Π΅ Π±Π»ΠΈΡΠΊΡ Π΄ΠΎ libpng Π²ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΈ (Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π΅ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ½Π°ΠΏΡΠ΅Π΄, Π° Π²ΠΎ Π΄ΡΡΠ³ΠΈ Π΅ ΠΈΠ½ΡΠ΅ΡΠΈΠΎΡΠ΅Π½), Π½ΠΎ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²ΠΎ ΠΏΡΠ΅Π΄ stb_image (Π΄ΠΎΠ±ΠΈΠ²ΠΊΠ° Π΄ΠΎ 20%).
Π Π΅ΡΠ΅ΡΠ΅Π½ΡΠ½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° QOI Π²ΠΎ C Π΅ ΡΠ°ΠΌΠΎ 300 Π»ΠΈΠ½ΠΈΠΈ ΠΊΠΎΠ΄. ΠΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° MIT. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, Π΅Π½ΡΡΠ·ΠΈΡΠ°ΡΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° Π΅Π½ΠΊΠΎΠ΄Π΅ΡΠΈ ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΈ Π½Π° ΡΠ°Π·ΠΈΡΠΈΡΠ΅ Go, Zig ΠΈ Rust. ΠΡΠΎΠ΅ΠΊΡΠΎΡ Π³ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΠΎΠΌΠΈΠ½ΠΈΠΊ Π¨Π°Π±Π»Π΅Π²ΡΠΊΠΈ, ΡΠ°Π·Π²ΠΈΠ²Π°Ρ Π½Π° ΠΈΠ³ΡΠΈ ΡΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ Π²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ MPEG1. ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΡΠΎΡΠΌΠ°ΡΠΎΡ QOI, Π°Π²ΡΠΎΡΠΎΡ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π΄Π΅ΠΊΠ° Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π° ΠΈ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ Π·Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠΈ.
ΠΠ·Π²Π΅Π΄Π±Π°ΡΠ° Π½Π° QOI Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠ½Π° ΠΎΠ΄ ΡΠ΅Π·ΠΎΠ»ΡΡΠΈΡΠ°ΡΠ° ΠΈ ΠΏΡΠΈΡΠΎΠ΄Π°ΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° (O(n)). ΠΠΎΠ΄ΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ΡΠΎ ΡΠ΅ Π²ΡΡΠ°Ρ Π²ΠΎ Π΅Π΄Π½ΠΎ ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π°ΡΠ΅ - ΡΠ΅ΠΊΠΎΡ ΠΏΠΈΠΊΡΠ΅Π» ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π°Ρ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ° Π½Π° Π΅Π΄Π΅Π½ ΠΎΠ΄ 4-ΡΠ΅ Π½Π°ΡΠΈΠ½ΠΈ, ΠΈΠ·Π±ΡΠ°Π½ΠΈ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ. ΠΠΊΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΠΈΠΊΡΠ΅Π» ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π½Π΅ ΡΠΎ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΈΠΎΡ, ΡΠΎΠ³Π°Ρ Π±ΡΠΎΡΠ°ΡΠΎΡ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°. ΠΠΊΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΡ ΡΠ΅ ΡΠΎΠ²ΠΏΠ°ΡΠ° ΡΠΎ Π΅Π΄Π½Π° ΠΎΠ΄ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π²ΠΎ ΡΠ°ΠΌΠΏΠΎΠ½ ΠΎΠ΄ 64 ΠΏΠΈΠΊΡΠ΅Π»ΠΈ, ΡΠΎΠ³Π°Ρ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΠ²Π° ΡΠΎ 6-Π±ΠΈΡΠ½Π° ΠΏΠΎΠΌΠ΅ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠΈΠ½Π°ΡΠΈΠΎΡ ΠΏΠΈΠΊΡΠ΅Π». ΠΠΊΠΎ Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΈΠΎΡ ΠΏΠΈΠΊΡΠ΅Π» Π΅ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠΈΠ½Π°ΠΊΠ²Π°, ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° Π΅ ΠΎΠ·Π½Π°ΡΠ΅Π½Π° Π²ΠΎ ΠΊΡΠ°ΡΠΊΠ° ΡΠΎΡΠΌΠ° (ΠΊΡΠ°ΡΠΊΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΠΊΠΈΡΠ΅ Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° Π±ΠΎΡΠ°ΡΠ° ΡΡΠΎ ΡΠ΅ Π²ΠΊΠ»ΠΎΠΏΡΠ²Π°Π°Ρ Π²ΠΎ 2,4, 5 ΠΈ XNUMX Π±ΠΈΡΠ°). ΠΠΊΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π½Π΅ Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΡΠ΅Π»ΠΎΡΠ½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° rgba.
ΠΠ·Π²ΠΎΡ: opennet.ru