Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ²
ΠΠ΅ΡΠΎΠ΄ LoadFromFile Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ BMP-ΡΠ°ΠΉΠ» Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΡΠΈΡΡΠ²Π°Ρ Π΅Π³ΠΎΡ Π΄ΠΈΡΠΊΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΈΡΠ°Π΅ΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ Ρ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π΅ infoHeadSize. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ Π² ΠΏΠΎΠ»Π΅ imageSize ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠ² Π±Π°ΠΉΡΠ°Ρ . ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
1. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΡΠ°ΠΉΠ»Π°
1.1 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° GIF
Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°Ρ
1.1.1 ΠΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ
GIF — ΡΠΎΡΠΌΠ°Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (ΠΎΡ Π°Π½Π³Π». GraphicsInterchangeFormat). Π€ΠΎΡΠΌΠ°Ρ GIF ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΆΠ°ΡΡΠ΅ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Π΄ΠΎ 256 ΡΠ²Π΅ΡΠΎΠ² Ρ ΠΏΠ°Π»ΠΈΡΡΠΎΠΉ, ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, Π΄Π»Ρ ΡΠ΅ΡΡΠ΅ΠΆΠ΅ΠΉ, Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ΠΈ Ρ. Π΄.
ΠΠ΅Π·Π°Π²ΠΈΡΡΡΠΈΠΉ ΠΎΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΡΠΌΠ°Ρ GIF Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π² 1987 Π³ΠΎΠ΄Ρ (GIF87a) ΡΠΈΡΠΌΠΎΠΉ CompuServe Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠ΅ΡΡΠΌ. Π 1989;ΠΌ ΡΠΎΡΠΌΠ°Ρ Π±ΡΠ» ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ (GIF89a), Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ ΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ. Π€Π°ΠΉΠ» GIF ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ ΠΎΠ΄Π½ΠΎ, Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ ΠΌΠΎΠ³ΡΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ°ΡΡΠΎΡΠΎΠΉ.
GIF ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Internet. Π€ΠΎΡΠΌΠ°Ρ GIF ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΡΠ΄ΠΎΠΌ ΡΠ²ΠΎΠΉΡΡΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ²ΡΠΈΡ Π΅Π³ΠΎ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Web-ΡΡΡΠ°Π½ΠΈΡ:
— ΠΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ. ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ GIF ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΎΠΉΡΠΈ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΡ ΡΠΎΡΠΌ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ.
— Π§Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΡΠ½Π°ΡΠ°Π»Π° Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ΅ΡΠ²Π΅ΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°, ΡΠ°ΡΡΡΠ½ΡΡΠ°Ρ Π½Π° ΡΡΠΈ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ . ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΠ΅. ΠΠ°ΡΠ΅ΠΌ, ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΡΠΎΠΊ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΠΈΠ΄. Π’Π°ΠΊΠ°Ρ ΡΡ Π΅ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΅ΡΠ΅ Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ.
— ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ. Π€ΠΎΡΠΌΠ°ΡΠΎΠΌ GIF ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» ΠΈ ΡΠ΅ΡΠ΅Π΄ΡΡΡΠΈΡ ΡΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ[4].
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° GIF ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ 256 ΡΠ²Π΅ΡΠΎΠ².
ΠΠ±Π»Π°ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ GIF-ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΠΆΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (LZW-ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΡ), ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ ΡΠ²Π΅ΡΠΎΠ² Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π°Π»ΠΈΡΠΈΡ ΠΎΠ΄Π½ΠΎΡΠ²Π΅ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ. ΠΠ°ΠΈΠ±ΠΎΠ»ΡΡΡΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠ° ΡΠ°ΠΉΠ»Π° Π΄Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ²Π΅ΡΠΎΠ² ΠΈ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΠ΄Π½ΠΎΡΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΠΎΡΠΌΠ°Ρ GIF ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅Π½Ρ ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΉ (Π³ΡΠ°ΡΠΈΠΊΠΈ, ΡΡ Π΅ΠΌΡ, Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΈ Ρ. ΠΏ.). Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° GIF Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΠ²Π΅ΡΠ½ΡΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΌΠ°Π»ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ ΡΠ²Π΅ΡΠΎΠ² ΠΈ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΆΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
1.1.2 ΠΠ±ΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΉΠ»Π° GIF
Π’Π°Π±Π»ΠΈΡΠ°. ΠΠ±ΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ (ΡΠΌ ΡΠΈΡ. 1.1).
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π° | |
ΠΠ°Π»ΠΈΡΡΠ° | |
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅1 | |
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅N | |
ΠΡΠΈΠ·Π½Π°ΠΊ ΠΊΠΎΠ½ΡΠ° = 3Π | |
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π°. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π° GIF ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ (ΡΠΌ ΡΠΈΡ. 1.2.). Π ΠΏΠ΅ΡΠ²ΡΡ ΡΡΠ΅Ρ Π±Π°ΠΉΡΠ°Ρ ΡΡΠΎΠΈΡ ΠΌΠ΅ΡΠΊΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (`GIF'). ΠΠ° Π½Π΅ΠΉ ΡΠ»Π΅Π΄ΡΡΡ 3 Π±Π°ΠΉΡΠ° Ρ ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅ΠΌ Π²Π΅ΡΡΠΈΠΈ GIF. ΠΠ°Π»Π΅Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π±Π»ΠΎΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 7 Π±Π°ΠΉΡΠΎΠ² Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π°.
Π’Π°Π±Π»ΠΈΡΠ°. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π° GIF
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ | Π Π°Π·ΠΌΠ΅Ρ (Π² Π±Π°ΠΉΡΠ°Ρ ) | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ | |
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ GIF | 47 49 46 («GIF») | ||
ΠΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ | 87Π° ΠΈΠ»ΠΈ 89Π° | ||
Π¨ΠΈΡΠΈΠ½Π° | |||
ΠΡΡΠΎΡΠ° | |||
Π€Π»Π°Π³ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ | |||
Π¦Π²Π΅Ρ ΡΠΎΠ½Π° | |||
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ | ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²Π΅ΡΠΎΠ² ΠΈ ΠΏΡΠΎΡΠ΅Π΅ | ||
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ — ΡΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, Π΅ΡΡΡ Π»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ°Π»ΠΈΡΡΠ°, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ RGB-ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° Π² ΠΏΠ°Π»ΠΈΡΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΡΠΎΠ² ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΡΠΎΡΠΊΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (ΠΏΠΈΠΊΡΠ΅Π»Ρ), ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΡΠ²Π΅ΡΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. ΠΠΎΡΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ΄Π΅Ρ ΠΏΠ°Π»ΠΈΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² ΡΠ°ΠΉΠ»Π΅ GIF, Π΅ΡΠ»ΠΈ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡΡΡ. ΠΠ°Π»ΠΈΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ°Π»ΠΈΡΡΠ° ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΡΡΠΎΠ΅ΠΊ Π±Π°ΠΉΡΠΎΠ² RGB. ΠΠ±Π΅ ΠΏΠ°Π»ΠΈΡΡΡ — Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ — Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ. ΠΠΎΡΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π° ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ — ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ (Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ). ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (ΡΠΌ. ΡΠΈΡ. 1.3).
Π’Π°Π±Π»ΠΈΡΠ°
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ | Π Π°Π·ΠΌΠ΅Ρ (Π² Π±Π°ΠΉΡΠ°Ρ ) | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ | |
ΠΡΠΈΠ·Π½Π°ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ | 2Π‘hΠΈΠ»ΠΈ «,» (ASCII) Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ | ||
ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΊΡΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆ. | |||
ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΊΡΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆ. | |||
Π¨ΠΈΡΠΈΠ½Π° | |||
ΠΡΡΠΎΡΠ° | |||
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ | ΠΠ°Π»ΠΈΡΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ°Π»ΠΈΡΡ, ΠΏΡΠΎΡΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ | ||
ΠΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°-ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π ΠΎΠ»Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠΎΡΡΠΎΠΈΡ ΠΏΡΠΎΡΡΠΎ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ Π²Ρ ΠΎΠ΄Π΅ Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ GIF-ΡΠ°ΠΉΠ» ΡΠΎΡΡΠΎΠΈΡ Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΠΌ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅ 0x2C ΠΈΠ»ΠΈ ',' (Π·Π°ΠΏΡΡΠ°Ρ). ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π·Π° Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, — ΡΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡΡΡ, Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠ»Π΅ΡΠ΅Π½ΠΈΡ ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΈΡΠ»ΠΎ Π±ΠΈΡ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΠ°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ°Π»ΠΈΡΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠΎΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅. Π‘ΠΆΠ°ΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΌΠ΅Π½ΡΡΠ΅ 255 Π±Π°ΠΉΡΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ Π±Π»ΠΎΠΊ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π±Π°ΠΉΡΠ° Π΄Π»ΠΈΠ½Ρ Π±Π»ΠΎΠΊΠ° ΠΈ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ, ΠΈΠ΄Π΅Ρ Π±Π»ΠΎΠΊ Π½ΡΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ.
ΠΠΎΡΠΎΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π½Π΅ΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°), Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΎΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ Π»ΠΈΠ½ΠΈΡΠΌ). ΠΠ°Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΡΡΡΠΎΠΈΡΡΡ Π½Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΡΠΎ Π½Π° ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π»ΠΈΠ½ΠΈΡΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Ρ ΡΠ΅Π»ΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ[4].
1.1.3 Π‘ΠΆΠ°ΡΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ LZW
ΠΠ°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² GIF Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΡΠΆΠ°ΡΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ LZW (Lempel-ZivWelch). LZW — ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΡΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠ°Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΡΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ, LZW ΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ ΠΈΡ ΡΠΆΠ°ΡΠΈΡ ΠΈ ΡΠ°ΡΠΊΡΡΡΠΈΡ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ:
— «Π‘ΠΈΠΌΠ²ΠΎΠ»»: ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ — ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ²Π΅Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π° (K).
— «Π¦Π΅ΠΏΠΎΡΠΊΠ°»: Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ»ΠΈΠ½Π° ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡ 1 Π΄ΠΎ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ([…]K).
— «ΠΡΠ΅ΡΠΈΠΊΡ»: ΠΏΡΠ΅ΡΠΈΠΊΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½ΡΠ»Π΅Π²ΡΡ Π΄Π»ΠΈΠ½Ρ ([…]).
— «ΠΠΎΡΠ΅Π½Ρ»: ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½Π°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ° ([…]K, Π³Π΄Π΅ […] - ΠΏΡΡΡΠ°).
— «ΠΠΎΠ΄»: ΡΠΈΡΠ»ΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π±ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡΡΠ΅Ρ ΡΠ΅ΠΏΠΎΡΠΊΡ.
— «ΠΠΎΡΠΎΠΊ ΠΊΠΎΠ΄ΠΎΠ²»: Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ «ΡΠ°ΡΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅» .
— «ΠΠ»Π΅ΠΌΠ΅Π½Ρ»: ΠΊΠΎΠ΄ ΠΈ Π΅Π³ΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ°.
— «Π’Π°Π±Π»ΠΈΡΠ° ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ»: ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ±ΡΡΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ .
ΠΡΠΈ ΡΠΆΠ°ΡΠΈΠΈ ΠΈ ΡΠ°ΡΠΊΡΡΡΠΈΠΈ LZW ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΠ΅Ρ ΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ: ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ. ΠΡΠΈ ΡΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠΌ ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΠ΄ΠΎΠ² — Π²ΡΡ ΠΎΠ΄Π½ΡΠΌ. ΠΡΠΈ ΡΠ°ΡΠΊΡΡΡΠΈΠΈ Π²Ρ ΠΎΠ΄Π½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΠ΄ΠΎΠ², Π° ΠΏΠΎΡΠΎΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² — Π²ΡΡ ΠΎΠ΄Π½ΡΠΌ. Π’Π°Π±Π»ΠΈΡΠ° ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΈ ΠΏΡΠΈ ΡΠΆΠ°ΡΠΈΠΈ ΠΈ ΠΏΡΠΈ ΡΠ°ΡΠΊΡΡΡΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΎΡ ΡΠΆΠ°ΡΠΈΡ ΠΊ ΡΠ°ΡΠΊΡΡΡΠΈΡ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΠ΅ΡΠ²ΡΠΌ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈ LZW-ΡΠΆΠ°ΡΠΈΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠΎΠ΄ ΡΠ°Π·ΠΌΠ΅ΡΠ° (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡ), ΠΈ Π·Π½Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΊΠΎΠ΄ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ°Π²Π½ΡΠΌ 12 Π±ΠΈΡΠ°ΠΌ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ 0FFF, ΠΈΠ»ΠΈ 4096, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ.
Π§ΡΠΎΠ±Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠ΄Π° #0 ΡΠΈΠΌΠ²ΠΎΠ»Ρ #0, ΠΊΠΎΠ΄Π° #1 to ΡΠΈΠΌΠ²ΠΎΠ»Ρ #1, ΠΈ Ρ. Π΄., Π΄ΠΎ ΠΊΠΎΠ΄Π° #31 ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° #31. Π’. Π΅. ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡ 0 Π΄ΠΎ 31 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΠ½Π΅Π²ΡΠΌ (Π±ΠΎΠ»ΡΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠ΄ΠΎΠ², ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΡ ΡΡΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ).
ΠΠ°ΡΠ½Π΅ΠΌ ΡΠΆΠ°ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ : ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ «ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ» ΠΈ «ΡΠ΅ΠΊΡΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ». ΠΡΠ΅ΡΠΈΠΊΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ. «Π’Π΅ΠΊΡΡΠ°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ°» («[.c.]K) ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ P. Π‘Π΄Π΅Π»Π°Π΅ΠΌ [.c.]P ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠΎΠΉ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²Ρ ΠΎΠ΄ΠΈΡ Π»ΠΈ Π² Π½Π΅Π΅ [.c.]P. ΠΡΠ»ΠΈ Π²Ρ ΠΎΠ΄ΠΈΡ, ΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ. ΠΠ°ΡΠ΅ΠΌ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡ [.c.]P.
ΠΠ΅ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² — Q, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ[.c.]Q. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²Ρ ΠΎΠ΄ΠΈΡ Π»ΠΈ Π² Π½Π΅Π΅ [.c.]Q. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΡ. ΠΠΎΠ±Π°Π²ΠΈΠΌ [.c.]Q Π² ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΏΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΠΌ #32,ΠΈ Π²ΡΠ²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠ΄ Π΄Π»Ρ [.c.] Π² ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΠ΄ΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΡΠ½Π΅ΠΌ ΠΎΠΏΡΡΡ Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΊ [.c.], ΡΡΠΎΠ±Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ [.c.]K, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ [.c.]K Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ΄ Π΄Π»Ρ [.c.] ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ [.c.]K Π² ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΠΈ LZW Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ (ΡΠΌ. ΡΠΈΡ. 1.4):
Π ΠΈΡΡΠ½ΠΎΠΊ 1.4 — ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΠΈ LZW
1.2 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΠΠ
1.2.1 ΠΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ
Π€ΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ² BMPΡΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ Windows. ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°ΠΌΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌΠΈ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Windows ΠΈ, ΠΏΠΎ ΡΡΡΠΈ, Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈ Π½Π° ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½. Π‘ΠΏΠΎΡΠΎΠ±Π΅Π½ Ρ ΡΠ°Π½ΠΈΡΡ ΠΊΠ°ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ (Π΄ΠΎ 256 ΡΠ²Π΅ΡΠΎΠ²), ΡΠ°ΠΊ ΠΈ RGB-ΡΠ²Π΅Ρ (16.700.000 ΠΎΡΡΠ΅Π½ΠΊΠΎΠ²). ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΆΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ RLE, Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² (ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ .rle) «Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ». Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΡΠΎΡΠΌΠ°ΡΠ° ΠΠΠ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ OS/2.
1.2.2 ΠΠ±ΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΠΠ
Π’Π°Π±Π»ΠΈΡΠ°. BMP-ΡΠ°ΠΉΠ» ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΡ ΡΠ°ΡΡΠ΅ΠΉ (ΡΠΌ. ΡΠΈΡ. 1.5).
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ | Π Π°Π·ΠΌΠ΅Ρ (Π² Π±Π°ΠΉΡΠ°Ρ ) | |
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π° | ||
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ | ||
ΠΠ°Π»ΠΈΡΡΠ° | ΠΠ°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ²Π΅ΡΠΎΠ². | |
Π‘Π°ΠΌΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ | ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄. ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ°ΡΡΡΠ° ΠΈ ΠΊΠΎΠ»ΠΈΡ. Π±ΠΈΡΠΎΠ² Π½Π° ΠΏΠΈΠΊΡΠ΅Π»Ρ. | |
Π’Π°Π±Π»ΠΈΡΠ°. Π‘ΡΡΡΠΊΡΡΡΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΠΠ -ΡΠ°ΠΉΠ»Π°
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ | Π Π°Π·ΠΌΠ΅Ρ (Π² Π±Π°ΠΉΡΠ°Ρ ) | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ | |
bfType | ΠΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ «ΠΠ». | ||
bfSize | Π Π°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π² Π±Π°ΠΉΡΠ°Ρ . | ||
bfReserved1 | ΠΠ°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΎ. Π Π°Π²Π½ΠΎ 0. | ||
bfReserved2 | ΠΠ°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΎ. Π Π°Π²Π½ΠΎ 0. | ||
bfOffBits | ΠΠ΄ΡΠ΅Ρ Π±ΠΈΡΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. | ||
ΠΠ°Π»Π΅Π΅ Π² ΡΠ°ΠΉΠ»Π΅ ΠΈΠ΄Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ — Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (BITMAPINFOHEADER, ΠΌΠΎΠΆΠ΅ΡΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΡΠ°ΡΡΡΠ° ΠΈ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² (ΡΠΌ. ΡΠΈΡ. 1.7).
Π’Π°Π±Π»ΠΈΡΠ°. Π‘ΡΡΡΠΊΡΡΡΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ | Π Π°Π·ΠΌΠ΅Ρ (Π² Π±Π°ΠΉΡΠ°Ρ ) | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ | |
biSize | Π Π°Π·ΠΌΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, ΡΠ°Π²Π΅Π½ 40 Π±Π°ΠΉΡ. | ||
biWidth | Π¨ΠΈΡΠΈΠ½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. | ||
biHeight | ΠΡΡΠΎΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. | ||
biplanes | Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ 1. | ||
biBitCount | ΠΠΈΡΠ½Π°ΠΏΠΈΠΊΡΠ΅Π». ΠΠΎΠΆΠ΅ΡΠ±ΡΡΡ 1, 4, 8, 16, 24 ΠΈΠ»ΠΈ 32. | ||
biCompression | ΠΠΎΠΌΠΏΡΠ΅ΡΡΠΈΡ: 0 — Π±Π΅Π· ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΠΈ; 1 — ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΡ RLE8 (8 Π±ΠΈΡ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»); 2 — ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΡ RLE4 (4 Π±ΠΈΡΠ° Π½Π° ΠΏΠΈΠΊΡΠ΅Π»); 3 — Π±Π΅Π· ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΠΈ Π΄Π»Ρ 16 ΠΈ 32 Π±ΠΈΡΠ° Π½Π° ΠΏΠΈΠΊΡΠ΅Π». | ||
biSizeImage | Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π±Π°ΠΉΡΠ°Ρ . | ||
biXPelsPerMeter | ΠΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ Π½Π° ΠΌΠ΅ΡΡ. | ||
biYPelsPerMeter | ΠΠ΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ Π½Π° ΠΌΠ΅ΡΡ. | ||
biClrUsed | ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² ΠΏΠ°Π»ΠΈΡΡΠ΅. | ||
biCrlImportant | Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. | ||
ΠΠ°Π»Π΅Π΅ Π² ΡΠ°ΠΉΠ»Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠ°Π»ΠΈΡΡΠ° (ΠΌΠΎΠΆΠ΅Ρ ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ) Π² Π²ΠΈΠ΄Π΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ RGBQUADΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΏΠΎΠ»Π΅ΠΉ, Π΄Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π·Π½Π° 1 Π±Π°ΠΉΡΡ (ΡΠΌ. ΡΠΈΡ. 1.8).
Π’Π°Π±Π»ΠΈΡΠ°. Π‘ΡΡΡΠΊΡΡΡΠ° Π·Π°ΠΏΠΈΡΠΈ RGBQUAD
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ | |
rgbBlue | ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π‘ΠΈΠ½ΠΈΠΉ, ΠΎΡ 0 Π΄ΠΎ 255 | |
rgbGreen | ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΠ΅Π»Π΅Π½ΡΠΉ, ΠΎΡ 0 Π΄ΠΎ 255 | |
rgbRed | ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΡΠ°ΡΠ½ΡΠΉ, ΠΎΡ 0 Π΄ΠΎ 255 | |
rgbReserved | ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈ ΡΠ°Π²Π½ΠΎ 0. | |
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ RGBQUAD ΡΠ°Π²Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ²Π΅ΡΠΎΠ².
ΠΠΎΡΠ»Π΅ ΠΏΠ°Π»ΠΈΡΡΡ (Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π΅ΡΡΡ) Π² ΡΠ°ΠΉΠ»Π΅ ΠΠΠ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΡΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ. ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½ΡΠ»ΡΠΌΠΈ Π΄ΠΎ Π΄Π»ΠΈΠ½Ρ, ΠΊΡΠ°ΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΡΠ΅ΠΌ. ΠΠ°Π΄ΠΎ Π΅ΡΠ΅ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ ΠΊΠ°ΠΊ Π±Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠ½ΡΡΠΎΠ΅"Π²Π²Π΅ΡΡ Π½ΠΎΠ³Π°ΠΌΠΈ", Ρ. Π΅. ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΠΈΡΠ°Π½Π° Π½ΠΈΠΆΠ½ΡΡ ΡΡΡΠΎΠΊΠ°, ΠΏΠΎΡΠΎΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅ Π΄ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π²Π΅ΡΡ Π°.
2. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°
2.1 ΠΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° BMP
ΠΡΠΊΡΡΡΠΈΠ΅ BMP ΡΠ°ΠΉΠ»Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ LoadFromFile, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ BMP-ΡΠ°ΠΉΠ» Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΡΠΈΡΡΠ²Π°Ρ Π΅Π³ΠΎ Ρ Π΄ΠΈΡΠΊΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΈΡΠ°Π΅ΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ Ρ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π΅ infoHeadSize.
ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ Π² ΠΏΠΎΠ»Π΅ imageSize ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π±Π°ΠΉΡΠ°Ρ . ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° plnfoHead ΠΈ ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² aBitmapBits. ΠΠΎΡΠ»Π΅ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ°ΡΡΡΠ° ΡΠΈΡΠ°ΡΡΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°.
ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ 2.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ BMP ΡΠ°ΠΉΠ»Π°.
2.3 ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ Π ΠΈΡΡΠ½ΠΎΠΊ 2.4 — ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π ΠΈΡΡΠ½ΠΎΠΊ 2.3 — ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ΅Π½ΠΈΡ BMPΡΠ°ΠΉΠ»Π°
2.2 ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² GIF-ΡΠΎΡΠΌΠ°ΡΠ΅
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² GIF-ΡΠ°ΠΉΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ (ΡΠΌ. ΡΠΈΡ. 2.2).
Π ΠΈΡΡΠ½ΠΎΠΊ 2.2 — ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°Ρ GIF
3.ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΠ΅ΠΊΡΠΎΠ²
3.1 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π±Π°Π·ΠΈΡΠ°ΠΌΠΈ RGB ΠΈ CMY
CMY (Cyan, Magenta, Yellow — Π³ΠΎΠ»ΡΠ±ΠΎΠΉ, ΠΏΡΡΠΏΡΡΠ½ΡΠΉ, ΠΆΠ΅Π»ΡΡΠΉ) — Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π² ΠΏΠΎΠ»ΠΈΠ³ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠ±ΡΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΡΠ΅Π½ΠΊΠΎΠ², ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° Π²ΡΡΠΈΡΠ°Π½ΠΈΠΈ ΡΠ»ΠΎΠ΅ΠΌ ΠΊΡΠ°ΡΠΊΠΈ ΡΠ°ΡΡΠΈ ΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. Π¦Π²Π΅ΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ CMY ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΊ ΡΠ²Π΅ΡΠ°ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ RGB, Ρ. Π΅. Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌΠΈ ΠΈΡ Π΄ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.1 — Π¦Π²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΊΡΠ± ΠΌΠΎΠ΄Π΅Π»ΠΈ CMY
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ CMY — ΡΠΎΡ ΠΆΠ΅ ΠΊΡΠ±, ΡΡΠΎ ΠΈ Π΄Π»Ρ RGB, Π½ΠΎ Ρ Π½Π°ΡΠ°Π»ΠΎΠΌ ΠΎΡΡΡΠ΅ΡΠ° Π² ΡΠΎΡΠΊΠ΅ Ρ RGB ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ (1,1,1), ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π΅Π»ΠΎΠΌΡ ΡΠ²Π΅ΡΡ. Π¦Π²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΊΡΠ± ΠΌΠΎΠ΄Π΅Π»ΠΈ CMY ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 2.4.
ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡRGB Π² CMY: C := 255 — R; M := 255 — G; Y := 255 — B;
ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡCMY Π² RGB: R := 255 — C; G := 255 — M; B := 255 — Y;
Π ΠΈΡΡΠ½ΠΎΠΊ3.3 — ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡCMYΠ²RGB
Π ΠΈΡ.
3.2 ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π±Π°Π·ΠΈΡΠ°ΠΌΠΈ RGB ΠΈ HSV
HSV (Hue, Saturation, Value — ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΠΎΠ½, Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΡΡΡ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²Π΅ΡΠ°) — ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ²Π½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡΡΠ΅Π½ΠΊΠ° ΡΠ²Π΅ΡΠ° (ΡΠΈΡ. 3). ΠΠΎΠ΄ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ — ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠ½ΡΡΡΠΉ ΡΠ΅ΡΡΠΈΠ³ΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡ.
ΠΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ ΠΊΠΎΠ½ΡΡΠ° Π·Π°Π΄Π°Π΅ΡΡΡ V — ΡΠ²Π΅ΡΠ»ΠΎΡΠ°, ΠΌΠ΅Π½ΡΡΡΠ°ΡΡΡ ΠΎΡ 0 Π΄ΠΎ 1. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ V = 0 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½Π° ΠΊΠΎΠ½ΡΡΠ°, Π·Π½Π°ΡΠ΅Π½ΠΈΡ V = 1 — ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°; ΡΠ²Π΅ΡΠ° ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½Ρ.
Π¦Π²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΠΎΠ½ H Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ³Π»ΠΎΠΌ, ΠΎΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌΡΠΌ Π²ΠΎΠΊΡΡΠ³ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, 0Β° — ΠΊΡΠ°ΡΠ½ΡΠΉ, 60Β° — ΠΆΠ΅Π»ΡΡΠΉ, 120Β° — Π·Π΅Π»Π΅Π½ΡΠΉ, 180Β° — Π³ΠΎΠ»ΡΠ±ΠΎΠΉ, 240Β° — ΡΠΈΠ½ΠΈΠΉ, 300Β° — ΠΏΡΡΠΏΡΡΠ½ΡΠΉ, Ρ. Π΅. Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅ΡΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π΄ΡΡΠ³ ΠΏΡΠΎΡΠΈΠ² Π΄ΡΡΠ³Π° (ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π½Π° 180Β°).
ΠΠ°ΡΡΡΠ΅Π½Π½ΠΎΡΡΡ S ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π»ΠΈΠ·ΠΎΠΊ ΡΠ²Π΅Ρ ΠΊ «ΡΠΈΡΡΠΎΠΌΡ» ΠΏΠΈΠ³ΠΌΠ΅Π½ΡΡ ΠΈ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΡ 0 Π½Π° Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ V Π΄ΠΎ 1 Π½Π° Π±ΠΎΠΊΠΎΠ²ΡΡ Π³ΡΠ°Π½ΡΡ ΡΠ΅ΡΡΠΈΠ³ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.4 — Π Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ HSV
Π’ΠΎΡΠΊΠ° V = 0, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π΅ΡΡΠΈΠ½Π° ΠΊΠΎΠ½ΡΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ²Π΅ΡΡ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ S ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΡΠΌ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0−1. Π’ΠΎΡΠΊΠ° Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ V = 1, S = 0 — ΡΠ΅Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π±Π΅Π»ΠΎΠΌΡ ΡΠ²Π΅ΡΡ. ΠΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ V ΠΏΡΠΈ S=0, Ρ. Π΅. Π½Π° ΠΎΡΠΈ ΠΊΠΎΠ½ΡΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ΅ΡΡΠΌ ΡΠ²Π΅ΡΠ°ΠΌ. ΠΡΠ»ΠΈ S = 0, ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π½ΠΊΠ° H ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.5 — ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡRGBΠ²HSV
Π ΠΈΡΡΠ½ΠΎΠΊ 3.6 — ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡHSV Π² RGB
3.3 ΠΠ°ΡΡΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ M
ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ MΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 3.7.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.7 — ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ M
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠΌΠΈΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ M Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈΠ½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ΡΠ»ΠΈ Π² ΡΠ°ΠΉΠ»Π΅ Π΅ΡΡΡ ΠΏΠ°Π»ΠΈΡΡΠ°, ΡΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ²Π΅ΡΡ ΠΏΠ°Π»ΠΈΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° MΠΏΡΠΈΠ±Π°Π²ΠΈΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΡΠΌ.
ΠΡΠ»ΠΈ Π² ΡΠ°ΠΉΠ»Π΅ Π½Π΅Ρ ΠΏΠ°Π»ΠΈΡΡΡ, ΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ Π½Π° CMY, ΠΏΡΠΈΠ±Π°Π²ΠΈΡΡ ΠΊ MΠ·Π°Π΄Π°Π½Π½ΡΠΉ ΡΡΠΌ, Π²Π΅ΡΠ½ΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ MΠ²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°.
3.4 ΠΠ°ΡΡΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ S
ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ S ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 3.8.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.8 — ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ S.
ΠΠ°Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π±Π°Π·ΠΈΡΠ΅ RGB ΠΈ Π΄Π»Ρ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ S Π±Π°Π·ΠΈΡΠ° HSV Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΈΠ· Π±Π°Π·ΠΈΡΠ° RGB Π² Π±Π°Π·ΠΈΡ HSV, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° RGBtoHSV. ΠΠ°Π»Π΅Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΡΡΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ S, ΠΏΡΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½Π΅ΠΉ ΡΡΠΌΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°Π·ΠΈΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ HSVtoRGB.
3.5 Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΡΠΈΠ»ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ 3×3. ΠΠ°ΡΡΠΈΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° Π½Π° ΡΠΈΡ. 3.4.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.9 — ΠΠ°ΡΡΠΈΡΠ° ΡΠΈΠ»ΡΡΡΠ° 6
Π ΠΈΡΡΠ½ΠΎΠΊ 3.10 — ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ, Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠΎΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΌΠ½ΠΎΠΆΠ°Π΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ. ΠΡΠΈ ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ 0…255, ΡΠΎ ΠΎΠ½Π° ΠΏΡΠΈΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΊ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΈΠ»ΡΡΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡ. 3.5
3.6 ΠΡΡΠ΅ΠΊΡ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΡΡΠ³ΠΎΠ²
ΠΡΡΠ΅ΠΊΡ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΡΡΠ³ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π²ΡΡΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π½ΡΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ, Π³Π΄Π΅ Π½ΡΠ»ΡΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ ΠΊΡΡΠ³. Π Π°Π·Π»ΠΎΠΆΠΈΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±Π°Π·ΠΈΡ RGB, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠΌΠ½ΠΎΠΆΠ°Π΅ΡΡΡ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΡΡ.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.11 — ΠΡΡΠ΅ΠΊΡ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΡΡΠ³ΠΎΠ²
4. Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ ΡΡ Π΅ΠΌΡ (ΡΠΌ. ΡΠΈΡ. 4.1).
Π ΠΈΡΡΠ½ΠΎΠΊ 4.1 — Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
5.ΠΡΠ±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ±ΠΎΡΠ°
Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅ΡΡΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΡΡΠ°ΡΠΈΡΡ ΠΌΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ.
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΡ Windows-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C++ ΠΈ Π²Ρ ΠΎΠ΄ΡΡΠ°Ρ Π² ΡΠΎΡΡΠ°Π² MicrosoftVisualStudio 2008, WindowsForms. ΠΠ½Π° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Windows ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ° ΡΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ OLE ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠ°Π½Π½Π°Ρ ΠΊΡΡΡΠΎΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅Π‘++. ΠΡΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π² Ρ ΠΏΠΎΠΌΠΎΡΡΡ C++Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π³Π»ΡΠ±ΠΎΠΊΠΈΡ Π·Π½Π°Π½ΠΈΠΉ Π² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ.
6.ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ»Π°ΡΡ FormatΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ BMP. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 6.1.
Π ΠΈΡΡΠ½ΠΎΠΊ 6.1 — ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠ»Π°ΡΡΠ° Format
ΠΡΠΎΠΌΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠ»Π°ΡΡ Format ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅:
1) ΠΠ΅ΡΠΎΠ΄ CreateDib24 ΡΠΎΠ·Π΄Π°Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ 24-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΉ ΡΠ°ΡΡΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΈ Π²ΡΡΠΎΡΠΎΠΉ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ². Π Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄ΠΈΡΠΊΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ»Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² Π½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΡΡΡΠ°.
2) ΠΠ΅ΡΠΎΠ΄ SetPixel ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΈΠΊΡΠ΅Π»Π°ΠΌ Π² 24-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΌ ΡΠ°ΡΡΡΠ΅. Π¦Π²Π΅ΡΠΎΠ²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠΈΠ½Π΅ΠΉ, Π·Π΅Π»Π΅Π½ΠΎΠΉ ΠΈ ΠΊΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ²Π΅ΡΠ°ΠΏΠΈΠΊΡΠ΅Π»Π° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° aBitmapBits. ΠΠ΄ΡΠ΅ΡΠ°ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΡΠ°Π·Π²Π΅ΡΡΠΊΠΈ Ρ ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΈΠΊΡΠ΅Π»Π° Π² ΡΡΡΠΎΠΊΠ΅ Ρ .
3) ΠΠ΅ΡΠΎΠ΄ StoreDib24 ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΡΡΡ, Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ Π΅Π³ΠΎ Π½Π° Π΄ΠΈΡΠΊ Π²ΡΠΎΡΠΌΠ°ΡΠ΅ GIF.
4) ΠΠ΅ΡΠΎΠ΄ LoadFromFile Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ BMP-ΡΠ°ΠΉΠ» Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΡΠΈΡΡΠ²Π°Ρ Π΅Π³ΠΎΡ Π΄ΠΈΡΠΊΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΈΡΠ°Π΅ΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ Ρ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π΅ infoHeadSize. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ Π² ΠΏΠΎΠ»Π΅ imageSize ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠ² Π±Π°ΠΉΡΠ°Ρ . ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° plnfoHeadΠΈ ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² aBitmapBits. ΠΠΎΡΠ»Π΅ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ°ΡΡΡΠ° ΡΠΈΡΠ°ΡΡΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°.
5) ΠΠ΅ΡΠΎΠ΄ Draw Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ°ΡΡΡ Π½Π°ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ StretchDIBits.
6) ΠΠ΅ΡΠΎΠ΄ RgbToHlsΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ Π΄Π°Π½ΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· RGBΠ² HLS.
7) ΠΠ΅ΡΠΎΠ΄ HlsToRgbΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· HLSΠ² RGB.
8) ΠΠ΅ΡΠΎΠ΄ NoiseMΠ·Π°ΡΡΠΌΠ»ΡΠ΅Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ M
9) ΠΠ΅ΡΠΎΠ΄ NoiseSΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· RGBΠ² HLS, Π·Π°ΡΡΠΌΠ»ΡΠ΅Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ SΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΈΠ· HLSΠ² RGB.
10) ΠΠ΅ΡΠΎΠ΄ FilterΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡ «ΡΠ°Π·ΠΌΡΡΠΈΠ΅» ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π’Π°Π±Π»ΠΈΡΠ° 6.1 ΠΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° KDib.
ΠΠ΅ΡΠΎΠ΄ | Π’ΠΈΠΏ | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ | |
CreateDib24 | BOOL | Π‘ΠΎΠ·Π΄Π°Π΅Ρ GIF — ΡΠ°ΠΉΠ» | |
StoreDib24 | VOID | ΠΠ΅ΡΠ΅ΡΡΠ»ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ | |
LoadFromFile | BOOL | ΠΠ°Π³ΡΡΠΆΠ°Π΅Ρ BMP — ΡΠ°ΠΉΠ» | |
SetPixel | VOID | Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ | |
Draw | INT | ΠΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ | |
GetWidth | INT | ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠΈΠ½Ρ | |
GetHeight | INT | ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΡΠΎΡΡ | |
GetError | CHAR* | ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ | |
RGBtoHSV | VOID | ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΈΠ· RGB Π² HSV | |
HSVToRGB | VOID | ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΈΠ· HSV Π² RGB | |
LoadFromFile | BOOL | ΠΠ°Π³ΡΡΠΆΠ°Π΅Ρ BMP — ΡΠ°ΠΉΠ» | |
GetA | BYTE* | ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² | |
Draw | INT | ΠΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ | |
GetWidth | INT | ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠΈΠ½Ρ | |
GetHeight | INT | ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΡΠΎΡΡ | |
NoiseB | VOID | ΠΠ°ΡΡΠΌΠ»ΡΠ΅ΡB | |
NoiseS | VOID | ΠΠ°ΡΡΠΌΠ»ΡΠ΅Ρ S | |
Filter | VOID | Π€ΠΈΠ»ΡΡΡΡΠ΅Ρ | |
7.Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡ WindowsXP Π΄ΠΎ WindowsVISTA. ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΡΠΎΠ±ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ .
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΊ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ — ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΈΠΏΠ° Pentium ΠΈΠ»ΠΈ Celeron Ρ ΡΠ°ΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ Π½Π΅ Π½ΠΈΠΆΠ΅ 166 ΠΠΡ (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Pentium III800 ΠΠΡ), ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ — 512 ΠΠ±Π°ΠΉΡ (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ 1024 ΠΠ±Π°ΠΉΡ), Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π²ΡΠ΅Π³ΠΎ 50MΠ±.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΈΠΌΠ΅ΡΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΠΎΡΠΊΡΡΡΠΈΠ΅, ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² GIF ΠΈ BMP, ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ ΡΠΏΠ΅ΡΡΡΡΠ΅ΠΊΡΡ.
ΠΡΠ²ΠΎΠ΄Ρ
Π ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ΅ΡΠ΅Π½Ρ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈΠ·Π°Π΄Π°ΡΠΈ, ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠΎΡΠΌΠ°ΡΠ°ΠΌΠΈ GIFΠΈ ΠΠΠ .
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ°Π±ΠΎΡΠ° Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠΎΡΠΌΠ°ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΡ: ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π΄ΡΡΠ³ΠΈΠΌ Π±Π°Π·ΠΈΡΠ°ΠΌ, ΡΡΡΠ΅ΠΊΡΡ ΡΡΠΌΠ° Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ .
Π Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΡΡΡ Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΡΠ΅Π±Π½ΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅Π»ΡΡ .
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Format.h
class Format {
public:
BYTE* aBitmapBits;// ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ²
BYTE* aBitmapBits1;
BYTE* aBitmapCMY;
BYTE* aBitmapHSV;
BYTE R;
BYTE G;
BYTE B;
Format ();
~Format ();
BOOL CreateDib24(int w, int h, constchar* fileName);
void StoreDib24();
BOOL LoadFromFile (constchar* fileName);
void SetPixel (int x, int y, COLORREF color);
int Draw (HDC hdc, int xDst, int yDst, int wDst, int hDst,
int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop);
int GetWidth () { return width; }
int GetHeight () { return height; }
constchar* GetError () { return error. c_str ();}
void RGBtoCMY ();
void RGBtoHSV ();
void CMYtoRGB ();
void HSVtoRGB ();
void BazisΠ‘ ();
void BazisM ();
void BazisY ();
void BazisH ();
void BazisS ();
void BazisV ();
void NoiseM ();
void NoiseS ();
void Filter ();
void Save ();
void Circ ();
void Transformtocirc (int x, int y);
int Draw1(HDC hdc, int xDst, int yDst, int wDst, int hDst,
int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop);
void TransformPix (int x, int y);
private:
int width;
int height;
int bytesPerLine;
BITMAPFILEHEADER fileHead; // Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎΡΠ°ΠΉΠ»Π°
BITMAPINFOHEADER infoHead; // Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎΠ±Π»ΠΎΠΊΠ°
BITMAPINFOHEADER* pInfoHead;
int fileHeadSize;
int infoHeadSize;
int imageSize;
string error;
ofstream outFile;
};
Format.cpp
#include" Format. h"
#include
Format:Format ()
{
fileHeadSize = sizeof (BITMAPFILEHEADER);
fileHead.bfType = 0x4d42;
aBitmapBits = NULL;
}
Format:~Format () {
if (pInfoHead) delete [] pInfoHead;
if (aBitmapBits) delete [] aBitmapBits;
if (outFile) outFile. close ();
}
BOOL Format: CreateDib24(int w, int h, constchar* fileName) ios: binary
BOOL Format: LoadFromFile (constchar* fileName) {
ifstream inpFile;
inpFile.open (fileName, ios: in | ios: binary);
if (!inpFile) {
error = «ΠΠ΅Π²Π΅ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.» ;
return FALSE;
}
inpFile.read ((char*)&fileHead, fileHeadSize);
if (fileHead.bfType ≠ 0x4d42) {
error = «ΠΡΠΎΠ½Π΅ BMP-ΡΠ°ΠΉΠ»» ;
return FALSE;
}
infoHeadSize = fileHead. bfOffBits — fileHeadSize;
int fileSize = fileHead. bfSize;
imageSize = fileSize — (fileHeadSize + infoHeadSize);
pInfoHead = (BITMAPINFOHEADER*)(new BYTE [infoHeadSize]);
inpFile.read ((char*)pInfoHead, infoHeadSize);
width = pInfoHead->biWidth;
height = pInfoHead->biHeight;
aBitmapBits = new BYTE[imageSize];
inpFile.read ((char*)aBitmapBits, imageSize);
returntrue;
}
int Format: Draw (HDC hdc, int xDst, int yDst, int wDst, int hDst,
int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop) {
return StretchDIBits (hdc, xDst, yDst, wDst, hDst, xSrc, ySrc, wSrc, hSrc,
aBitmapBits, (CONST BITMAPINFO*)pInfoHead, DIB_RGB_COLORS, rop);
}
void Format: SetPixel (int x, int y, COLORREF color) {
int row = y;
int col = 3 * x;
aBitmapBits[row*bytesPerLine + col] = GetBValue (color);
aBitmapBits[row*bytesPerLine + col+1] = GetGValue (color);
aBitmapBits[row*bytesPerLine + col+2] = GetRValue (color);
aBitmapBits;
}
void Format: StoreDib24() {
// ΠΠ°ΠΏΠΈΡΡΠ·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° BMP-ΡΠ°ΠΉΠ»Π°
outFile.write ((char*)&fileHead, fileHeadSize);
outFile.write ((char*)&infoHead, infoHeadSize);
// ΠΠ°ΠΏΠΈΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ
outFile.write ((char*)aBitmapBits, imageSize);
}
void Format: CMYtoRGB ()
{
HDC hdc;
BYTE R, G, B, C, M, Y;
int x = GetWidth ();
int y = GetHeight ();
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
int row = y;
int col = 3 * x;
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
C = aBitmapCMY[row*bytesPerLine + col*3 + 2];
M = aBitmapCMY[row*bytesPerLine + (col*3)+ 1];
Y = aBitmapCMY[row*bytesPerLine + (col*3)];
R = 255-C;
G = 255-M;
B = 255-Y;
aBitmapBits[row*bytesPerLine + (col*3)] = B;
aBitmapBits[row*bytesPerLine + (col*3)+ 1] = G;
aBitmapBits[row*bytesPerLine + col*3 + 2] = R;
}
aBitmapBits;
}
void Format: RGBtoCMY ()
{
BYTE R, G, B, C, M, Y;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapCMY = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
C = 255-R;
M = 255-G;
Y = 255-B;
aBitmapCMY[row*bytesPerLine + (col*3)] = Y;
aBitmapCMY[row*bytesPerLine + (col*3)+ 1] = M;
aBitmapCMY[row*bytesPerLine + col*3 + 2] = C;
}
aBitmapBits=aBitmapCMY;
}
void Format: RGBtoHSV (){
BYTE R, G, B, H, S, V;
double rgbmin, rgbmax;
double rc, bc, gc;
double ht=0.0,st=0.0;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapHSV = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++)
{
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
rgbmin = min (R, min (G, B));
rgbmax = max (R, max (G, B));
if (rgbmax > 0.0)
st = (rgbmax — rgbmin) / rgbmax;
if (st > 0.0) {
rc = (rgbmax — R) / (rgbmax — rgbmin);
gc = (rgbmax — G) / (rgbmax — rgbmin);
bc = (rgbmax — B) / (rgbmax — rgbmin);
if (R == rgbmax) ht = bc — gc;
elseif (G == rgbmax) ht = 2 + rc — bc;
elseif (B == rgbmax) ht = 4 + gc — rc;
ht = ht * 60.0;
if (ht < 0.0) ht += 360.0;
}
H = ht / 360.0;
V = rgbmax;
S = st;
aBitmapHSV[row*bytesPerLine + (col*3)] = V;
aBitmapHSV[row*bytesPerLine + (col*3)+ 1] = S;
aBitmapHSV[row*bytesPerLine + col*3 + 2] = H;
}
}
void Format: HSVtoRGB ()
{
BYTE R, G, B, H, S, V, i_H;
int ii;
double fr;
unsignedchar c1, c2, c3;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
i_H = aBitmapHSV[row*bytesPerLine + col*3 + 2];
S = aBitmapHSV[row*bytesPerLine + (col*3)+ 1];
V = aBitmapHSV[row*bytesPerLine + (col*3)];
if (!S)
R = G = B = V;
else
{
while (i_H >= 360)
i_H -= 360;
H = i_H;
ii = (int)(H /= 60.0);
fr = H — ii;
c1 = (V * (255 — S)) / 255;
c2 = (V * (255 — S * fr)) / 255;
c3 = (V * (255 — S * (1.0 — fr))) / 255;
switch (ii)
{
case 0: R = V; G = c3; B = c1; break;
case 1: R = c2; G = V; B = c1; break;
case 2: R = c1; G = V; B = c3; break;
case 3: R = c1; G = c2; B = V; break;
case 4: R = c3; G = c1; B = V; break;
case 5: R = V; G = c1; B = c2; break;
} // switch
} // if (!sat)
aBitmapBits[row*bytesPerLine + (col*3)] = B;
aBitmapBits[row*bytesPerLine + (col*3)+ 1] = G;
aBitmapBits[row*bytesPerLine + col*3 + 2] = R;
}
}
void Format: NoiseM (){
BYTE M;
int x = GetWidth ();
int y = GetHeight ();
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
M = aBitmapCMY[row*bytesPerLine + (col*3)+1];
M+=rand ();
if (M < 0) M = 0;
if (M > 255) M = 255;
aBitmapCMY[row*bytesPerLine + (col*3)+1] = M;
}
aBitmapBits = aBitmapCMY;
}
void Format: NoiseS (){
BYTE S;
int x = GetWidth ();
int y = GetHeight ();
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
S = aBitmapHSV[row*bytesPerLine + (col*3)+1];
S+=rand ();
if (S < 0) S = 0;
if (S > 255) S = 255;
aBitmapHSV[row*bytesPerLine + (col*3)+1] = S;
}
aBitmapBits = aBitmapHSV;
}
void Format: TransformPix (int x, int y){
BYTE NewBGR[3];
int Pixel[3];
BYTE Pix[3];
int w = GetWidth ();
int h = GetHeight ();
int count = 9;
int Matrix[9]={1,2,1,
2,4,2,
1,2,1};
int bytesPerLine = ((w * 24 + 31) / 32) * 4;
// x y
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[y*bytesPerLine + x*3 + c];
Pixel[c] = NewBGR[c] * Matrix[4];
}
// x-1 y-1
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[(y-1)*bytesPerLine + (x-1)*3 + c];
Pixel[c] += NewBGR[c] * Matrix[0];
}
// x y-1
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[y*bytesPerLine + (x-1)*3 + c];
Pixel[c] += NewBGR[c] * Matrix[1];
}
// x+1 y-1
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[(y+1)*bytesPerLine + (x-1)*3 + c];
Pixel[c] += NewBGR[c] * Matrix[2];
}
// x+1 y
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[(y+1)*bytesPerLine + x*3 + c];
Pixel[c] += NewBGR[c] * Matrix[5];
}
// x+1 y+1
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[(y+1)*bytesPerLine + (x+1)*3 + c];
Pixel[c] += NewBGR[c] * Matrix[8];
}
// x y+1
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[y*bytesPerLine + (x+1)*3 + c];
Pixel[c] += NewBGR[c] * Matrix[7];
}
// x-1 y+1
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[(y-1)*bytesPerLine + (x+1)*3 + c];
Pixel[c] += NewBGR[c] * Matrix[6];
}
// x-1 y
for (int c = 0; c < 3; c++){
NewBGR[c] = aBitmapBits[(y-1)*bytesPerLine + x*3 + c];
Pixel[c] += NewBGR[c] * Matrix[3];
}
for (int c = 0; c < 3; c++){
if (count≠0)
Pixel[c] = Pixel[c]/count;
Pix[c] = BYTE (Pixel[c]);
if (Pix[c] < 0)
Pix[c] = 0;
elseif (Pix[c] > 255)
Pix[c]=255;
aBitmapHSV[y*bytesPerLine + x*3 + c] = Pix[c];
}
}
void Format: Filter (){
int w = GetWidth ();
int h = GetHeight ();
imageSize = w * h * 4;
aBitmapHSV = new BYTE[imageSize];
for (int y = 1; y < h-1;y++)
for (int x = 1;x < w-1;x++){
TransformPix (x, y);
}
aBitmapBits = aBitmapHSV;
}
void Format: BazisΠ‘ ()
{
BYTE R, G, B, C, M, Y;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapCMY = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
C = 255-R;
M = G-G;
Y = B-B;
aBitmapCMY[row*bytesPerLine + (col*3)] = Y;
aBitmapCMY[row*bytesPerLine + (col*3)+ 1] = M;
aBitmapCMY[row*bytesPerLine + col*3 + 2] = C;
}
aBitmapBits=aBitmapCMY;
}
void Format: BazisM ()
{
BYTE R, G, B, C, M, Y;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapCMY = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
C = R-R;
M = 255-G;
Y = B-B;
aBitmapCMY[row*bytesPerLine + (col*3)] = Y;
aBitmapCMY[row*bytesPerLine + (col*3)+ 1] = M;
aBitmapCMY[row*bytesPerLine + col*3 + 2] = C;
}
aBitmapBits=aBitmapCMY;
}
void Format: BazisY ()
{
BYTE R, G, B, C, M, Y;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapCMY = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++){
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
C = R-R;
M = G-G;
Y = 255-B;
aBitmapCMY[row*bytesPerLine + (col*3)] = Y;
aBitmapCMY[row*bytesPerLine + (col*3)+ 1] = M;
aBitmapCMY[row*bytesPerLine + col*3 + 2] = C;
}
aBitmapBits=aBitmapCMY;
}
void Format: BazisH (){
BYTE R, G, B, H, S, V;
double rgbmin, rgbmax;
double rc, bc, gc;
double ht=0.0,st=0.0;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapHSV = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++)
{
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
rgbmin = min (R, min (G, B));
rgbmax = max (R, max (G, B));
if (rgbmax > 0.0)
st = (rgbmax — rgbmin) / rgbmax;
if (st > 0.0) {
rc = (rgbmax — R) / (rgbmax — rgbmin);
gc = (rgbmax — G) / (rgbmax — rgbmin);
bc = (rgbmax — B) / (rgbmax — rgbmin);
if (R == rgbmax) ht = bc — gc;
elseif (G == rgbmax) ht = 2 + rc — bc;
elseif (B == rgbmax) ht = 4 + gc — rc;
ht = ht * 60.0;
if (ht < 0.0) ht += 360.0;
}
H = ht / 360.0;
V = rgbmin;
S = 0;
aBitmapHSV[row*bytesPerLine + (col*3)] = V;
aBitmapHSV[row*bytesPerLine + (col*3)+ 1] = S;
aBitmapHSV[row*bytesPerLine + col*3 + 2] = H;
}
aBitmapBits=aBitmapHSV;
}
void Format: BazisS (){
BYTE R, G, B, H, S, V;
double rgbmin, rgbmax;
double rc, bc, gc;
double ht=0.0,st=0.0;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapHSV = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++)
{
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
rgbmin = min (R, min (G, B));
rgbmax = max (R, max (G, B));
if (rgbmax > 0.0)
st = (rgbmax — rgbmin) / rgbmax;
if (st > 0.0) {
rc = (rgbmax — R) / (rgbmax — rgbmin);
gc = (rgbmax — G) / (rgbmax — rgbmin);
bc = (rgbmax — B) / (rgbmax — rgbmin);
if (R == rgbmax) ht = bc — gc;
elseif (G == rgbmax) ht = 2 + rc — bc;
elseif (B == rgbmax) ht = 4 + gc — rc;
ht = ht * 60.0;
if (ht < 0.0) ht += 360.0;
}
H = 0.0;
V = 0 ;
S = st;
aBitmapHSV[row*bytesPerLine + (col*3)] = V;
aBitmapHSV[row*bytesPerLine + (col*3)+ 1] = S;
aBitmapHSV[row*bytesPerLine + col*3 + 2] = H;
}
aBitmapBits=aBitmapHSV;
}
void Format: BazisV (){
BYTE R, G, B, H, S, V;
double rgbmin, rgbmax;
double rc, bc, gc;
double ht=0.0,st=0.0;
int x = GetWidth ();
int y = GetHeight ();
int row = y;
int col = 3 * x;
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapHSV = new BYTE[imageSize];
for (int row = 0;row < y;row++)
for (int col = 0;col < x;col++)
{
R = aBitmapBits[row*bytesPerLine + col*3 + 2];
G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];
B = aBitmapBits[row*bytesPerLine + (col*3)];
rgbmin = min (R, min (G, B));
rgbmax = max (R, max (G, B));
if (rgbmax > 0.0)
st = (rgbmax — rgbmin) / rgbmax;
if (st > 0.0) {
rc = (rgbmax — R) / (rgbmax — rgbmin);
gc = (rgbmax — G) / (rgbmax — rgbmin);
bc = (rgbmax — B) / (rgbmax — rgbmin);
if (R == rgbmax) ht = bc — gc;
elseif (G == rgbmax) ht = 2 + rc — bc;
elseif (B == rgbmax) ht = 4 + gc — rc;
ht = ht * 60.0;
if (ht < 0.0) ht += 360.0;
}
H = 0.0;
V = rgbmax ;
S = 0;
aBitmapHSV[row*bytesPerLine + (col*3)] = V;
aBitmapHSV[row*bytesPerLine + (col*3)+ 1] = S;
aBitmapHSV[row*bytesPerLine + col*3 + 2] = H;
}
aBitmapBits=aBitmapHSV;
}
void Format: Save ()
{
int x = GetWidth ();
int y = GetHeight ();
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapBits1 = new BYTE[imageSize];
aBitmapBits1=aBitmapBits;
}
int Format: Draw1(HDC hdc, int xDst, int yDst, int wDst, int hDst,
int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop)
{
int x = GetWidth ();
int y = GetHeight ();
int bytesPerLine = ((x * 24 + 31) / 32) * 4;
imageSize = x * y * 3;
aBitmapBits = new BYTE[imageSize];
aBitmapBits=aBitmapBits1;
return StretchDIBits (hdc, xDst, yDst, wDst, hDst, xSrc, ySrc, wSrc, hSrc,
aBitmapBits1, (CONST BITMAPINFO*)pInfoHead, DIB_RGB_COLORS, rop);
}
void Format: Circ ()
{
int Matrix[11][11]={1,1,1,1,0,0,0,1,1,1,1,
1,1,1,0,0,1,0,0,1,1,1,
1,1,0,0,1,1,1,0,0,1,1,
1,0,0,1,1,1,1,1,0,0,1,
0,0,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,0,
0,0,1,1,1,1,1,1,1,0,0,
1,0,0,1,1,1,1,1,0,0,1,
1,1,0,0,1,1,1,0,0,1,1,
1,1,1,0,0,1,0,0,1,1,1,
1,1,1,1,0,0,0,1,1,1,1};
BYTE R, G, B;
int I=0,J=0;
int w = GetWidth ();
int h = GetHeight ();
int row = h;
int col = 3 * w;
int bytesPerLine = ((w * 24 + 31) / 32) * 4;
for (int i = 0;i < h; i++)
{
for (int j = 0;j < w; j++)
{
R = aBitmapBits[j*bytesPerLine + i*3 + 2];
G = aBitmapBits[j*bytesPerLine + (i*3)+ 1];
B = aBitmapBits[j*bytesPerLine + (i*3)];
R *=Matrix [I][J];
G *=Matrix [I][J];
B *=Matrix [I][J];
aBitmapBits[j*bytesPerLine + (i*3)] = B;
aBitmapBits[j*bytesPerLine + (i*3)+ 1] = G;
aBitmapBits[j*bytesPerLine + i*3 + 2] = R;
J++;
if (J==11)
{
J=0;
//j+=1;
}
}
I++;
J=0;
if (I==11)
{
I=0;
//i+=1;
}
}
aBitmapBits;
}
Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΎ Π½Π°