ΠΡΠ²Π΅ΠΆΠ΄Π° ΡΠ΅ Π½ΠΎΠ², Π»Π΅ΠΊ ΡΠΎΡΠΌΠ°Ρ Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π·Π°Π³ΡΠ±ΠΈ, QOI (Quite OK Image), ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ·ΠΎ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² 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. ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° ΠΎΡ Dominic Szablewski, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° ΠΈΠ³ΡΠΈ Ρ ΠΎΠΏΠΈΡ Π² ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° MPEG1 Π²ΠΈΠ΄Π΅ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ QOI ΡΠΎΡΠΌΠ°ΡΠ°, Π°Π²ΡΠΎΡΡΡ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅, ΡΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π° ΠΈ ΠΏΡΠΎΡΡΠ° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ΠΏΡΠ΅ΠΊΠ°Π»Π΅Π½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΈΡΠ΅ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ Π·Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° QOI Π½Π΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ ΠΈ Π΅ΡΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (O(n)). ΠΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Ρ Π΅Π΄Π½ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ - Π²ΡΠ΅ΠΊΠΈ ΠΏΠΈΠΊΡΠ΅Π» ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ°ΠΌΠΎ Π²Π΅Π΄Π½ΡΠΆ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ 4 Π½Π°ΡΠΈΠ½Π°, ΠΈΠ·Π±ΡΠ°Π½ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΌΠΈΠ½Π°Π»ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ. ΠΠΊΠΎ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΏΠΈΠΊΡΠ΅Π» ΡΡΠ²ΠΏΠ°Π΄Π½Π΅ Ρ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ, Π±ΡΠΎΡΡΡΡ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡΡΠ° ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°. ΠΠΊΠΎ ΠΏΠΈΠΊΡΠ΅Π» ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° Π΅Π΄Π½Π° ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π² Π±ΡΡΠ΅ΡΠ° Π½Π° ΠΌΠΈΠ½Π°Π»ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π» 64, ΡΠΎΠ³Π°Π²Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΡΠ΅ ΠΏΠΎΡΠΎΡΠ²Π° 6-Π±ΠΈΡΠΎΠ²ΠΎ ΠΎΡΠΌΠ΅ΡΡΠ²Π°Π½Π΅ ΡΠΏΡΡΠΌΠΎ ΠΌΠΈΠ½Π°Π»ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π». ΠΠΊΠΎ ΡΠ²Π΅ΡΡΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π» ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° Π»Π΅ΠΊΠΎ, ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΠΎΡΠΎΡΠ²Π° Π² ΠΊΡΠ°ΡΠΊΠ°ΡΠ° ΡΠΎΡΠΌΠ° (ΡΡΠΊΡΠ°ΡΠ΅Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΠΊΠΈΡΠ΅ Π² ΡΠ²Π΅ΡΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π²ΠΏΠΈΡΠ²Π°Ρ Π² 2,4 ΠΈ 5 Π±ΠΈΡΠ°). ΠΠΊΠΎ Π½Π΅ Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΡΠ΅ ΠΏΠΎΡΠΎΡΠ²Π° ΠΏΡΠ»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° rgba.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru