ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠ°Π»Π΅Π΅ ΡΡΠΊΠΎΡΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Y ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° ΡΠ²Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Cb ΠΈ Cr ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡΡΡ Π½Π° Π±Π»ΠΎΠΊΠΈ 8×8 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°Π΅ΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΊΠΎΡΠΈΠ½ΡΡΠ½ΠΎΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ (ΠΠΠ). ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΠΠ ΠΊΠ²Π°Π½ΡΡΡΡΡΡ (Π΄Π»Ρ Y, Cb ΠΈ Cr Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΠΊΠ²Π°Π½ΡΠΎΠ²Π°Π½ΠΈΡ) ΠΈ ΠΏΠ°ΠΊΡΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ΠΎΠ² Π₯Π°ΡΡΠΌΠ°Π½Π°. Π‘ΡΠ°Π½Π΄Π°ΡΡ JPEG Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- 1. ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
- 2. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
- 2.1 ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
- 2.2 ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
- 3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
- 3.1 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
- 3.2 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
- 3.3 Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
- ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
- Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ° (ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°ΡΠΈΠ½Π½Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ°) — ΠΎΠ±Π»Π°ΡΡΡ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΈΠ½ΡΠ΅Π·Π° (ΡΠΎΠ·Π΄Π°Π½ΠΈΡ) ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ°.
Π Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π ΡΠ°ΠΊ ΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠΎΡΠΌΠ°ΡΠ°Ρ BMP ΠΈ TGA. ΠΠ°Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΡΡΠΎΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π²ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ°ΡΡ Π·Π°Π΄Π°ΡΠΈ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ.
1. ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ:
1. Π‘ΡΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°.
2. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π·Π°Π΄Π°ΡΠ΅.
3. ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ Π»ΡΠ±ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΠ°ΡΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π² ΠΠ Π²ΡΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π² ΠΠ ΡΠ°Π±Π»ΠΈΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ Ρ. ΠΏ.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°Π·Π²Π°Π½Ρ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅.
Π€ΠΎΡΠΌΠ°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π° Π½ΠΎΠ²ΡΠ΅, ΡΠ°ΠΊΠΈΠ΅, ΡΡΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π·Π°Π΄Π°ΡΠ°Ρ .
2. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
2.1 ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
Π Π°ΡΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ ΠΌΠΎΠ·Π°ΠΈΠΊΡ ΠΈΠ· ΠΎΡΠ΅Π½Ρ ΠΌΠ΅Π»ΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² — ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. Π Π°ΡΡΡΠΎΠ²ΡΠΉ ΡΠΈΡΡΠ½ΠΎΠΊ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Π»ΠΈΡΡ ΠΊΠ»Π΅ΡΡΠ°ΡΠΎΠΉ Π±ΡΠΌΠ°Π³ΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠ»Π΅ΡΠΎΡΠΊΠ° Π·Π°ΠΊΡΠ°ΡΠ΅Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΡΠ°ΡΠΊΡΠ°ΡΠΊΠΈ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Π Π°ΡΡΡΠΎΠ²Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠΎΡΠ½ΡΠΌΠΈ ΠΈ ΡΡΡΡΡΠ°ΠΌΠΈ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡΠΌΠΈΡΡΡΡ ΡΠΈΡΡΠ½ΠΎΠΊ. ΠΠΈΠΊΡΠ΅Π»ΠΈ «Π½Π΅ Π·Π½Π°ΡΡ», ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ (Π»ΠΈΠ½ΠΈΠΈ, ΡΠ»Π»ΠΈΠΏΡΡ, ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ ΠΈ Ρ. Π΄.) ΠΎΠ½ΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ.
Π ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠ΅ ΡΠ΅ΡΠΌΠΈΠ½ «ΠΏΠΈΠΊΡΠ΅Π»Ρ», Π²ΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ:
Β· Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°;
Β· ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ;
Β· ΡΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΠΏΡΠΈΠ½ΡΠ΅ΡΠ΅.
ΠΠΎΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ, Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ:
Β· Π²ΠΈΠ΄Π΅ΠΎΠΏΠΈΠΊΡΠ΅Π»Ρ— Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅;
Β· ΠΏΠΈΠΊΡΠ΅Π»Ρ — ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ;
Β· ΡΠΎΡΠΊΠ° — Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΈΠ½ΡΠ΅ΡΠΎΠΌ.
ΠΡΠΈ ΡΡΠΎΠΌ Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ .
ΠΠΊΡΠ°Π½ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΡΠ°Π·Π±ΠΈΡ Π½Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΡΠΊΡ (ΡΠ°ΡΡΡ) ΠΈΠ· ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΡΡΠΎΠΊ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ². Π Π°Π·ΠΌΠ΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΎΡΠΌΠ΅ NxM, Π³Π΄Π΅ N — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ, Π° Π — ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ. ΠΠ° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄ΠΈΡΠΏΠ»Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΡΠΊΠΈ: 640×480, 800×600, 1024×768, 1240×1024 ΠΈ Π΄Ρ. ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΡΠ²Π΅ΡΠΊΠΈ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΌ Π»ΡΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΡΠΊΡΠ°Π½Π°. Π§ΡΠΎΠ±Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π³Π»Π°Π·ΠΎΠΌ, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΠ· ΡΠΎΡΠ΅Π½ ΠΈΠ»ΠΈ ΡΡΡΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΅Π½.
Π Π°ΡΡΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΠΊΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΡΡΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ°ΡΡΡΠΎΠ²Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΡΠΎΡΠΎΠ°ΠΏΠΏΠ°ΡΠ°ΡΠ°ΠΌΠΈ, ΡΠΊΠ°Π½Π΅ΡΠ°ΠΌΠΈ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΡΠ°ΡΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅, ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΡΠ΅ΠΌ ΡΠΊΡΠΏΠΎΡΡΠ° ΠΈΠ· Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΠ½ΠΈΠΌΠΊΠ° ΡΠΊΡΠ°Π½Π°.
ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π°:
Β· Π Π°ΡΡΡΠΎΠ²Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ (Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ) ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΠ±ΠΎΠΉ ΡΠΈΡΡΠ½ΠΎΠΊ, Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡ Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠΉ, Π³Π΄Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΡ Π² ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΡΠ°ΠΉΠ»Π°.
Β· Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΠΎΡΡΡ — ΡΠ°ΡΡΡΠΎΠ²Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅Π·Π΄Π΅: ΠΎΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ Π·Π½Π°ΡΠΊΠΎΠ² Π΄ΠΎ ΠΏΠ»Π°ΠΊΠ°ΡΠΎΠ².
Β· ΠΡΡΠΎΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π΅ΡΠ»ΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
Β· Π Π°ΡΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΡΡΡΠΎΠΉΡΡΠ² Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ ), ΠΌΠ°ΡΡΠΈΡΠ½ΡΠ΅ ΠΈ ΡΡΡΡΠΉΠ½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΅ΡΡ, ΡΠΈΡΡΠΎΠ²ΡΠ΅ ΡΠΎΡΠΎΠ°ΠΏΠΏΠ°ΡΠ°ΡΡ, ΡΠΊΠ°Π½Π΅ΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠ½Ρ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ:
Β· ΠΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ.
Β· ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Β· ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΠΏΠ΅ΡΠ°ΡΡ Π½Π° ΠΏΠ»ΠΎΡΡΠ΅Ρ.
ΠΠ·-Π·Π° ΡΡΠΈΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ ΡΠΈΡΡΠ½ΠΊΠΎΠ² ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π°ΠΆΠ΅ ΡΠΆΠ°ΡΠΎΠΉ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ Π³ΡΠ°ΡΠΈΠΊΡ.
Π€ΠΎΡΠΌΠ°ΡΡ:
Π Π°ΡΡΡΠΎΠ²ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΆΠ°ΡΠΎΠΌ Π²ΠΈΠ΄Π΅. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° ΡΠΆΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎ ΡΠΆΠ°ΡΠΈΡ (ΡΠΆΠ°ΡΠΈΠ΅ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΡ ΠΈΠ»ΠΈ ΡΠΆΠ°ΡΠΈΠ΅ Ρ ΠΏΠΎΡΠ΅ΡΡΠΌΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ). Π’Π°ΠΊ ΠΆΠ΅ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ: ΠΎΠ± Π°Π²ΡΠΎΡΠ΅ ΡΠ°ΠΉΠ»Π°, ΡΠΎΡΠΎΠΊΠ°ΠΌΠ΅ΡΠ΅ ΠΈ Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ , ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠΎΡΠ΅ΠΊ Π½Π° Π΄ΡΠΉΠΌ ΠΏΡΠΈ ΠΏΠ΅ΡΠ°ΡΠΈ ΠΈ Π΄Ρ. Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
BMP (ΠΎΡ Π°Π½Π³Π». Bitmap Picture) — ΡΠΎΡΠΌΠ°Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Microsoft.
Π‘ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ BMP ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Windows. Π€Π°ΠΉΠ»Ρ ΡΠΎΡΠΌΠ°ΡΠ° BMP ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ .bmp, .dib ΠΈ .rle. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄Π°Π½Π½ΡΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ΅ΡΡΡΡΠΎΠ² RES ΠΈ Π² PE-ΡΠ°ΠΉΠ»Ρ.
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Microsoft ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»Π° Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ Π½ΡΠΆΠ΄ ΡΠΎΡΠΌΠ°ΡΡ ICO ΠΈ CUR, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΡ ΠΎΠΆΡΡ Π½Π° BMP ΡΡΡΡΠΊΡΡΡΡ. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ WinAPI-ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ GDI.
ΠΠ»ΡΠ±ΠΈΠ½Π° ΡΠ²Π΅ΡΠ° Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ 1, 2, 4, 8, 16, 24, 32, 48 Π±ΠΈΡ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»Ρ, Π½ΠΎ Π³Π»ΡΠ±ΠΈΠ½Π° 2 Π±ΠΈΡΠ° Π½Π° ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π΄Π»Ρ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ²Π΅ΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ 16 Π±ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ°Π»ΠΈΡΡΠ° Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ 24 Π±ΠΈΡΠ°.
Π ΡΠΎΡΠΌΠ°ΡΠ΅ BMP ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΆΠ°ΡΠΈΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠΎΡΠΌΠ°Ρ BMP ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ RLE-ΡΠΆΠ°ΡΠΈΠ΅ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°, Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JPEG ΠΈ PNG (ΡΡΠΈ ΡΠΎΡΠΌΠ°ΡΡ Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ Π² BMP ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ). JPEG ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π‘ΠΆΠ°ΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΡΡΠ΅Π΄Π½Π΅Π½ΠΈΠΈ ΡΠ²Π΅ΡΠ° ΡΠΎΡΠ΅Π΄Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠΊΠΎΡΡΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΡΡΠ΅Π΄Π½ΡΠ΅ΡΡΡ) ΠΈ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π½ΠΈΠΈ Π²ΡΡΠΎΠΊΠΎΡΠ°ΡΡΠΎΡΠ½ΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΏΠ΅ΠΊΡΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΆΠ°ΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π·ΠΌΡΡΠΈΠ΅ ΡΠ΅Π·ΠΊΠΈΡ Π³ΡΠ°Π½ΠΈΡ ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΡΠ°Ρ Π²Π±Π»ΠΈΠ·ΠΈ Π½ΠΈΡ .
JPEG (ΠΏΡΠΎΠΈΠ·Π½ΠΎΡΠΈΡΡΡ «Π΄ΠΆΠ΅ΠΉΠΏΠ΅Π³», Π°Π½Π³Π». Joint Photographic Experts Group, ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°) — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ², ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΠΎΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π€Π°ΠΉΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ JPEG, ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (ΡΡΡΡΠΈΠΊΡΡ) .jpeg, .jfif, .jpg, .JPG, ΠΈΠ»ΠΈ .JPE. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠ· Π½ΠΈΡ .jpg ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ Π½Π° Π²ΡΠ΅Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ . MIME-ΡΠΈΠΏΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ image/jpeg.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ JPEG ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΆΠΈΠΌΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Ρ ΠΏΠΎΡΠ΅ΡΡΠΌΠΈ, ΡΠ°ΠΊ ΠΈ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΡ (ΡΠ΅ΠΆΠΈΠΌ ΡΠΆΠ°ΡΠΈΡ lossless JPEG).
ΠΠ»Π³ΠΎΡΠΈΡΠΌ JPEG Π² Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ ΠΈ ΠΊΠ°ΡΡΠΈΠ½, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π½Ρ Ρ ΠΏΠ»Π°Π²Π½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°ΠΌΠΈ ΡΡΠΊΠΎΡΡΠΈ ΠΈ ΡΠ²Π΅ΡΠ°. ΠΠ°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ JPEG ΠΏΠΎΠ»ΡΡΠΈΠ» Π² ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ΠΈ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠΈ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, JPEG ΠΌΠ°Π»ΠΎΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ ΡΠ΅ΡΡΠ΅ΠΆΠ΅ΠΉ, ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΠΈ Π·Π½Π°ΠΊΠΎΠ²ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ, Π³Π΄Π΅ ΡΠ΅Π·ΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠ΅Π΄Π½ΠΈΠΌΠΈ ΠΏΠΈΠΊΡΠ΅Π»Π°ΠΌΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ°Ρ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ TIFF, GIF ΠΈΠ»ΠΈ PNG.
JPEG (ΠΊΠ°ΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΡΠΊΠ°ΠΆΠ°ΡΡΠ΅Π³ΠΎ ΡΠΆΠ°ΡΠΈΡ) Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π²Π½ΠΎΡΠΈΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
JPEG Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ Π΄Π°ΠΆΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΆΠ°ΡΠΈΠΈ Π°ΡΡΡΠΎΠ½ΠΎΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ JPEG ΡΠ΅ΠΆΠΈΠΌ ΡΠΆΠ°ΡΠΈΡ Lossless JPEG (ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ²) ΠΈΠ»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠΆΠ°ΡΠΈΡ JPEG-LS.
Π‘ΠΆΠ°ΡΠΈΠ΅
ΠΡΠΈ ΡΠΆΠ°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΈΠ· ΡΠ²Π΅ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° RGB Π² YCbCr (YUV). Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ JPEG (ISO/IEC 10 918−1) Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ Π²ΡΠ±ΠΎΡ ΠΈΠΌΠ΅Π½Π½ΠΎ YCbCr, Π΄ΠΎΠΏΡΡΠΊΠ°Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΠΈΡΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²[2], ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΎΡ ΡΡΡΡ ), ΠΈ ΡΠΆΠ°ΡΠΈΠ΅ Π±Π΅Π· ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ (Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² RGB), ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ JFIF (JPEG File Interchange Format, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ Π² 1991 Π³ΠΎΠ΄Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ C-Cube Microsystems, ΠΈ ΡΡΠ°Π²ΡΠ°Ρ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π΅-ΡΠ°ΠΊΡΠΎ) ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ RGB->YCbCr.
ΠΠΎΡΠ»Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ RGB->YCbCr Π΄Π»Ρ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Cb ΠΈ Cr, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΡ Π·Π° ΡΠ²Π΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ «ΠΏΡΠΎΡΠ΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅» (subsampling), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π±Π»ΠΎΠΊΡ ΠΈΠ· 4 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² (2×2) ΡΡΠΊΠΎΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Y ΡΡΠ°Π²ΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΡΠ΅Π΄Π½ΡΠ½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Cb ΠΈ Cr (ΡΡ Π΅ΠΌΠ° ΠΏΡΠΎΡΠ΅ΠΆΠΈΠ²Π°Π½ΠΈΡ «4:2:0»). ΠΡΠΈ ΡΡΠΎΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° 2×2 Π²ΠΌΠ΅ΡΡΠΎ 12 Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (4 Y, 4 Cb ΠΈ 4 Cr) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ 6 (4 Y ΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΡΡΠ΅Π΄Π½ΡΠ½Π½ΠΎΠΌΡ Cb ΠΈ Cr). ΠΡΠ»ΠΈ ΠΊ ΠΊΠ°ΡΠ΅ΡΡΠ²Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΆΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ²ΡΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠΎΡΠ΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π»ΠΈΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ — ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ (ΡΡ Π΅ΠΌΠ° «4:4:0») ΠΈΠ»ΠΈ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ («4:2:2»), ΠΈΠ»ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΠΎΠ²ΡΠ΅ («4:4:4»).
Π‘ΡΠ°Π½Π΄Π°ΡΡ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Ρ ΡΡΡΠ΅Π΄Π½Π΅Π½ΠΈΠ΅ΠΌ Cb ΠΈ Cr Π½Π΅ Π΄Π»Ρ Π±Π»ΠΎΠΊΠ° 2×2, Π° Π΄Π»Ρ ΡΠ΅ΡΡΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ (ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ) ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ², ΡΠΎ Π΅ΡΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΎΠ² 1×4, 4×1 (ΡΡ Π΅ΠΌΠ° «4:1:1»), Π° ΡΠ°ΠΊΠΆΠ΅ 2×4 ΠΈ 4×2 (ΡΡ Π΅ΠΌΠ° «4:1:0»). ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΎΡΠ΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Cb ΠΈ Cr, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΡΡ Π΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΎ.
ΠΠ°Π»Π΅Π΅ ΡΡΠΊΠΎΡΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Y ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° ΡΠ²Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Cb ΠΈ Cr ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡΡΡ Π½Π° Π±Π»ΠΎΠΊΠΈ 8×8 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°Π΅ΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΊΠΎΡΠΈΠ½ΡΡΠ½ΠΎΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ (ΠΠΠ). ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΠΠ ΠΊΠ²Π°Π½ΡΡΡΡΡΡ (Π΄Π»Ρ Y, Cb ΠΈ Cr Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΠΊΠ²Π°Π½ΡΠΎΠ²Π°Π½ΠΈΡ) ΠΈ ΠΏΠ°ΠΊΡΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ΠΎΠ² Π₯Π°ΡΡΠΌΠ°Π½Π°. Π‘ΡΠ°Π½Π΄Π°ΡΡ JPEG Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠ·-Π·Π° ΠΏΠ°ΡΠ΅Π½ΡΠ½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ (ΠΏΠ°ΡΠ΅Π½Ρ Π½Π° ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ JPEG Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ QM-ΠΊΠΎΠ΄Π΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ IBM) Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΎΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π΄ΠΊΠΎ. Π ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ libjpeg ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΉ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠΌ ΡΠΆΠ°ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ°ΡΡΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΠΊΠ²Π°Π½ΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΠΠ, Ρ ΡΠ°Π½ΡΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ JPEG-ΡΠ°ΠΉΠ»Π°. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ½ΠΈ ΡΡΡΠΎΡΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ Π²ΡΡΠΎΠΊΠΎΡΠ°ΡΡΠΎΡΠ½ΡΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡΠ½ΠΎΠΌΡ ΠΊΠ²Π°Π½ΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ΅ΠΌ Π½ΠΈΠ·ΠΊΠΎΡΠ°ΡΡΠΎΡΠ½ΡΠ΅. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠ³ΡΡΠ±Π»Π΅Π½ΠΈΡ ΠΌΠ΅Π»ΠΊΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ. Π§Π΅ΠΌ Π²ΡΡΠ΅ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΡΠΆΠ°ΡΠΈΡ, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡΠ½ΠΎΠΌΡ ΠΊΠ²Π°Π½ΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°ΡΡΡΡ Π²ΡΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ.
Π Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌ ΡΠΆΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ JPEG ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ½Π΅ΡΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΈΡ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ ΡΠΆΠ°ΡΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ²: ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΏΠ°Π΅ΡΡΡ Π½Π° Π±Π»ΠΎΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 8×8 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² (ΡΡΠΎΡ ΡΡΡΠ΅ΠΊΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π·Π°ΠΌΠ΅ΡΠ΅Π½ Π½Π° ΠΎΠ±Π»Π°ΡΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠ»Π°Π²Π½ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΡΡΠΊΠΎΡΡΠΈ), Π² ΠΎΠ±Π»Π°ΡΡΡΡ Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΡΠ°Ρ ΠΈ Π³ΡΠ°Π½ΠΈΡΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ) Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΠΌΠΎΠ²ΡΡ ΠΎΡΠ΅ΠΎΠ»ΠΎΠ². Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ JPEG (ISO/IEC 10 918−1, Annex K, ΠΏ. K.8) ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΠ»ΡΡΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ², Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΈΡ Π²ΡΡΠΎΠΊΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ, JPEG ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΡΠΎΠΊΠΎΠΉ (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π²ΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²) ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠΆΠ°ΡΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΠΆΠ°ΡΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΠ²Π΅ΡΠ½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π²ΡΡΠΎΠΊΠΎΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ.
2.2 ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΠΎΠΏΠ°Π»ΠΎ Π½Π° Π²Π°Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ RGB ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠΎΠ², Ρ ΡΠ΅Π»ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π°ΠΈΠ»ΡΡΡΠ΅Π³ΠΎ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠ³ΠΎ Π±Π°Π»Π°Π½ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΡΠΊΠΎΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅Π·ΠΊΠΎΡΡΡ ΠΈΠ»ΠΈ ΡΠ°Π·ΠΌΡΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠ»ΡΡΡΠΎΠ². ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ:
ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°ΡΡΡΠ°Π± — Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ². ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΌΠ°ΡΡΡΠ°Π±ΠΎΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ — ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΉ.
ΠΠΎΠ΄ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° Π³ΡΠ°ΡΠΈΠΊΠΈ (ΡΠ°ΡΡΡΠΎΠ²Π°Ρ, Π²Π΅ΠΊΡΠΎΡΠ½Π°Ρ), ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ. ΠΡΠ»ΠΈ Π³ΡΠ°ΡΠΈΠΊΠ° Π²Π΅ΠΊΡΠΎΡΠ½Π°Ρ, ΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ°ΡΡΡΠΎΠ²Π°Ρ, ΡΠΎ ΠΏΡΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ΅ΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π Π°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (Π ΠΈΡ 2.2.1):
Π ΠΈΡΡΠ½ΠΎΠΊ 2.2.1 — ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ΄Π²ΠΎΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π°, Π·Π°ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΡΠ΅ΡΡΡΡΠΌΡ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ²Π΅ΡΠ° (Π ΠΈΡΡ 2.2.2):
Π ΠΈΡΡΠ½ΠΎΠΊ 2.2.2 — ΠΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π°, ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π΅Π³ΠΎ Π΄Π΅ΡΠ°Π»ΠΈ, Π½ΠΎ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π»Π΅ΡΡΠ½ΠΈΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ. ΠΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π±ΡΠΊΠ²Ρ W, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΈΠΌΠ΅ΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΎΡΠΌΡ «Π»Π΅ΡΠ΅Π½ΠΊΠΈ» .
ΠΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π³Π»Π°Π΄ΠΊΠΈΡ ΠΊΠΎΠ½ΡΡΡΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π±ΠΈΠ»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ (Π ΠΈΡ. 2.2.3):
Π ΠΈΡΡΠ½ΠΎΠΊ 2.2.3 — ΠΠΈΠ»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ (ΠΈΠ»ΠΈ Π±ΠΈΠ»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ) ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π»ΡΡΡΠ΅ ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π° Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΈ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ Π»Π΅ΡΡΠ½ΠΈΡΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π±ΠΈΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ (Π ΠΈΡ. 2.2.4):
Π ΠΈΡΡΠ½ΠΎΠΊ 2.2.4 — ΠΠΈΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ.
Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΡΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ²Π΅ΡΠ½ΡΡ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΡΡΡΠ΅ΠΊΡΠΎΠΌ Π»Π΅ΡΠ΅Π½ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ supersampling (ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ «ΡΠ²Π΅ΡΡ ΠΌΠ°ΡΡΡΠ°Π±Π°»).
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΈΠ»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π°Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π»ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ ΡΠΎΡΠ΅Π΄Π΅ΠΉ ΠΈ ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ°Π»ΠΎ ΡΠ΅ΠΌ ΡΡΡΡΠΏΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±ΠΈΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ.
ΠΠ»ΡΡΠ΅Π²Π°Ρ ΠΈΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΎΠ±ΡΡΠ½ΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ½Π°ΡΠ°Π»Π° Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, Π·Π°ΡΠ΅ΠΌ Π² Π΄ΡΡΠ³ΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Ρ Π±ΠΈΠ»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠ½ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ 0, 1, 1 ΠΈ 0.5. ΠΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ²Π΅ΡΠΎΠΌ Π ΠΈΡ (2.2.5):
Π ΠΈΡΡΠ½ΠΎΠΊ 2.2.5
ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ f Π² ΡΠΎΡΠΊΠ΅ P = (x, y). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² (ΠΎΠΊΡΡΠΆΠ°ΡΡΠΈΡ P) ΡΠΎΡΠΊΠ°Ρ Q11 = (x1, y1), Q12 = (x1, y2), Q21 = (x2, y1), ΠΈ Q22 = (x2, y2).
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΡΠ΅ΡΡΡ (Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΈ Π²Π΄ΠΎΠ»Ρ ΠΎΡΠΈ Π°Π±ΡΡΠΈΡΡ, Π³Π΄Π΅ Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ .
ΠΡΠΎ ΠΈ Π΅ΡΡΡ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΎΡΠΊΠ΅ P, ΡΠΎ Π΅ΡΡΡ f (x, y).
Π‘ΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π»ΠΈΡΠ΅Π½ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ², Π³Π»Π°Π²Π½ΡΠΌ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π² N ΡΠ°Π· ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ W Π½Π° H ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Ρ. Π΅. Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π½Π΅ NW Π½Π° NH ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Π° (N (W — 1) + 1) Π½Π° (N (H — 1) + 1) ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. Π‘Π²ΡΠ·Π°Π½ΠΎ ΡΡΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ W ΡΠΎΡΠ΅ΠΊ, Ρ. Π΅. (W-1) ΡΠΌΠ΅ΠΆΠ½ΡΡ ΠΏΠ°Ρ. ΠΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² N ΡΠ°Π· ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΡΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΎΡΠ΅ΠΊ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ (N-1) Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ (ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ Π²Π΄Π²ΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ, ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ Π²ΡΡΠΎΠ΅ — ΠΏΠΎ Π΄Π²Π΅ ΠΈ Ρ. Π΄.). ΠΡΠΎΠ³ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΈΡΠΈΠ½Π° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½Π° ΡΡΠΌΠΌΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ.
ΠΠ΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ. ΠΠ΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΎΡ ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ Π½Π΅Π³Π°ΡΠΈΠ²ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ Π²ΡΡΠ°Π²Π»Π΅Π½Ρ Π² ΡΠ°ΠΌΠΊΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ ΠΈ ΠΎΡΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½Ρ Π² Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π²ΡΡ ΡΠΈΠΊΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ΅Π½ΡΡΡ ΠΈΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ Y, Ρ. Π΅. Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΠΎ ΠΎΡΠΈ Y, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅
Π’Π°ΠΊ ΠΆΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ, ΡΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΠ° ΠΎΠ±Π»Π°ΡΡΠΈ). ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ»ΠΎΠ½ΠΈΡΡΡΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΈΠ· ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. Π’Π°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π² Π΄ΡΡΠ³ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ Π² Π»ΡΠ±ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ «Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ» ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΎΠ΅, Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅Π³ΠΎ, ΠΏΠΈΠΊΡΠ΅Π»ΠΈ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π½Π° ΠΌΠ΅ΡΡΠ΅ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΌΠ΅Π½ΡΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌΠΈ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
3.1 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΈΡΡΠΎΠ²ΡΡ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄Π²Π° Π³Π»Π°Π²Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ΅ΡΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ — ImageProcessing. ΠΠ°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ Π² Π½ΡΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° — ImageHandler, Π±Π΅Π· ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π’Π°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ CropForm ΠΈ ImageInfo. ΠΠ΅ΡΠ²Π°Ρ ΡΠΎΡΠΌΠ° ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°Π΄Π°Π» ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. ΠΡΠΎΡΠ°Ρ ΡΠΎΡΠΌΠ° ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ.
3.2 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
Π ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ:
Π’Π°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ImageProcessing, ΠΊΠ°ΠΊ:
menuItemOpen_Click (object sender, EventArgs e)
menuItemExit_Click (object sender, EventArgs e)
menuItemUndo_Click (object sender, EventArgs e)
menuItemImageInfo_Click (object sender, EventArgs e)
menuItemZoom50_Click (object sender, EventArgs e)
menuItemZoom100_Click (object sender, EventArgs e)
menuItemZoom200_Click (object sender, EventArgs e)
menuItemZoom300_Click (object sender, EventArgs e)
menuItemZoom400_Click (object sender, EventArgs e)
menuItemZoom500_Click (object sender, EventArgs e)
menuItemFlipH_Click (object sender, EventArgs e)
menuItemFlipV_Click (object sender, EventArgs e)
pictureBox1_KeyDown (object sender, KeyEventArgs e)
menuItem2_Click (object sender, EventArgs e)
menuItem3_Click (object sender, EventArgs e)
menuItem6_Click (object sender, EventArgs e)
menuItem1_Click (object sender, EventArgs e)
button1_Click (object sender, EventArgs e)
ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ.
ImageProcessing_Paint (object sender, PaintEventArgs e) — ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅.
AlphaBlending (Image xx, Image yy, float percent) — ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
menuItemCrop_Click (object sender, EventArgs e) — ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²ΡΡΠ΅Π·Π°Π½ΠΈΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ResetBitmap () — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ.
SaveBitmap (string saveFilePath) — ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
RotateFlip (RotateFlipType rotateFlipType) — ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
DrawOutCropArea (int xPosition, int yPosition, int width, int height) — Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ, ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ΅Π·Π°ΡΡ.
RemoveCropAreaDraw () — ΡΠ΄Π°Π»ΡΠ΅Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ.
3.3 Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΉΠ» ΡΠΎΡΠΌΠ°ΡΠ° JPEG Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ 800×600 ΠΏΠΈΠΊΡΠ΅Π»Ρ:
1. ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΌΠ°ΡΡΡΠ°Π± ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΠ±ΡΠ°Π·ΠΈΠΌ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
2. ΠΡΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π³ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡ Ctrl+Z.
3. ΠΡΠ΄Π΅Π»ΠΈΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π΅Π³ΠΎ.
4. Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ ΡΠ°ΠΉΠ» Π² ΡΠΎΡΠΌΠ°ΡΠ΅ BMP.
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»Π° Π²ΡΠ΅ ΠΏΡΠ½ΠΊΡΡ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π±ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ ΡΠ·ΠΊΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°. Π Π΅ΡΠ΅Π½Π½ΡΠ΅ Π·Π΄Π΅ΡΡ Π·Π°Π΄Π°ΡΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΡΡΠΎΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ Π² Π½Π°ΡΠΈ Π΄Π½ΠΈ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅. Π Π² Ρ ΠΎΠ΄Π΅ Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠΎΡΠΌΠ°ΡΠ°Ρ BMP ΠΈ JPEG.
ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠ°Ρ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ°:
1. ΠΠ΅ΡΠΎΠ΄ΠΈ ΡΠ° Π·Π°ΡΠΎΠ±ΠΈ ΠΊΠΎΠΌΠΏ’ΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ° ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΠΉΠ½ΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΡΠΉ. ΠΠΎΠ½ΡΠΏΠ΅ΠΊΡ Π»Π΅ΠΊΡΡΠΉ. /Π£ΠΊΠ».: Π. Π. ΠΡΠΈΠ²Π°Π»ΠΎΠ² — ΠΠΎΠ½Π΅ΡΡΠΊ: ΠΠΠ’.
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
ΠΏΠΎ ΡΠ΅ΠΌΠ΅:
2. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΡ. ΠΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΈΠ· ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ — ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΡΠ½ΡΠΈΠΊΠ»ΠΎΠΏΠ΅Π΄ΠΈΠΈ / ΠΠ». ΡΠ΅ΡΡΡΡ: http://ru.wikipedia.org/wiki/ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅_ΡΠΎΡΠΌΠ°ΡΡ
3. ΠΠΈΠΊΡΠ»ΠΈΠ½ Π. Π. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½Π°Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ. — Π‘ΠΠ±: ΠΠ₯Π-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, 2003. — 560 Ρ. — 3000 ΡΠΊΠ·. — ISBN 5−94 157−264−6
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
namespace ImageProcessing
{ public partial class ImageProcessing: Form
{OpenFileDialog oDlg;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°
SaveFileDialog sDlg1;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°
SaveFileDialog sDlg2;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°
private MenuItem cZoom;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
Bitmap temp;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
Bitmap cloneBitmap;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
int cropX = 0, cropY = 0, widthImgCrop = 100, heightImgCrop = 100;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ
ImageHandler imageHandler = new ImageHandler ();//ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° imageHandler
public ImageProcessing ()
*.bmp" ;
cZoom = menuItemZoom50;
private void ImageProcessing_Paint (object sender, PaintEventArgs e)//ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΠΌΡ
{
if (imageHandler.IsPicture)
{
e.Graphics.DrawImage (imageHandler.GetBitmap (), new Rectangle (this.AutoScrollPosition.X, this.AutoScrollPosition.Y, Convert. ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height)));
}
}
private void menuItemOpen_Click (object sender, EventArgs e)//ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π±ΠΈΡΠΌΠ°ΠΏ
{
if (DialogResult.OK == oDlg. ShowDialog ())
{
imageHandler.SetBitmap ((Bitmap)Bitmap.FromFile (oDlg.FileName));
imageHandler.BitmapPath = oDlg. FileName;
this.AutoScroll = true;
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
menuItemImageInfo_Click (0,e);//Π²ΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
}
}
private void menuItemUndo_Click (object sender, EventArgs e)//ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΌΠ΅Π½Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ
{
imageHandler.ResetBitmap ();
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
//ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ
this.Invalidate ();//ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
}
private void menuItemImageInfo_Click (object sender, EventArgs e)//ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
{
menuItemImageInfo.Enabled = true;
ImageInfo imgInfo = new ImageInfo (imageHandler);
imgInfo.Show ();
}
private void menuItemZoom50_Click (object sender, EventArgs e)
{
cZoom.Checked = false;
menuItemZoom50.Checked = true;
cZoom = menuItemZoom50;
imageHandler.BiInterp ((int)(imageHandler.TrueWidth * 0.5), (int) (imageHandler.TrueHeight * 0.5));
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
}
private void menuItemZoom100_Click (object sender, EventArgs e)
{
cZoom.Checked = false;
menuItemZoom100.Checked = true;
cZoom = menuItemZoom100;
imageHandler.BiInterp (imageHandler.TrueWidth, imageHandler. TrueHeight);
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
}
private void menuItemZoom150_Click (object sender, EventArgs e)
{
cZoom.Checked = false;
menuItemZoom150.Checked = true;
cZoom = menuItemZoom150;
imageHandler.BiInterp ((int)(imageHandler.TrueWidth * 1.5), (int)(imageHandler.TrueHeight * 1.5));
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
}
private void menuItemZoom200_Click (object sender, EventArgs e)
{
cZoom.Checked = false;
menuItemZoom200.Checked = true;
cZoom = menuItemZoom200;
imageHandler.BiInterp (imageHandler.TrueWidth * 2, imageHandler. TrueHeight * 2);
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
}
private void menuItemZoom300_Click (object sender, EventArgs e)
{
cZoom.Checked = false;
menuItemZoom300.Checked = true;
cZoom = menuItemZoom300;
imageHandler.BiInterp (imageHandler.TrueWidth * 3, imageHandler. TrueHeight*3);
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
}
private void menuItemZoom400_Click (object sender, EventArgs e)
{
cZoom.Checked = false;
menuItemZoom400.Checked = true;
cZoom = menuItemZoom400;
imageHandler.BiInterp (imageHandler.TrueWidth * 4, imageHandler. TrueHeight * 4);
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
}
private void menuItemZoom500_Click (object sender, EventArgs e)
{
cZoom.Checked = false;
menuItemZoom500.Checked = true;
cZoom = menuItemZoom500;
imageHandler.BiInterp (imageHandler.TrueWidth * 5, imageHandler. TrueHeight * 5);
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
}
private void menuItemFlipH_Click (object sender, EventArgs e)
{
imageHandler.RotateFlip (RotateFlipType.RotateNoneFlipX);//ΠΠ°Π΄Π°Π΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ
this.Invalidate ();
}
private void menuItemFlipV_Click (object sender, EventArgs e)
{
imageHandler.RotateFlip (RotateFlipType.RotateNoneFlipY);//ΠΠ°Π΄Π°Π΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ
this.Invalidate ();
}
private void pictureBox1_KeyDown (object sender, KeyEventArgs e)//ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
{
if (e.KeyCode == Keys. Right)
{
pictureBox1.Location = new System.Drawing.Point (cropX + 10, cropY);//ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ pictureBox1 ΠΏΠΎ X Π½Π° 10 Π²ΠΏΡΠ°Π²ΠΎ
cropX = cropX + 10;
}
if (e.KeyCode == Keys. Left)
{
pictureBox1.Location = new System.Drawing.Point (cropX — 10, cropY);//ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ pictureBox1 ΠΏΠΎ X Π½Π° 10 Π²Π»Π΅Π²ΠΎ
cropX = cropX — 10;
}
if (e.KeyCode == Keys. Up)
{
pictureBox1.Location = new System.Drawing.Point (cropX, cropY — 10);//ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ pictureBox1 ΠΏΠΎ Y Π½Π° 10 Π²Π½ΠΈΠ·
cropY = cropY — 10;
}
if (e.KeyCode == Keys. Down)
{
pictureBox1.Location = new System.Drawing.Point (cropX, cropY + 10);//ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ pictureBox1 ΠΏΠΎ Y Π½Π° 10 Π²Π²Π΅ΡΡ
cropY = cropY + 10;
}
}
private void menuItemCrop_Click (object sender, EventArgs e)//ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ
{
bool flag = false;//ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ»Π°Π³Π° Π½Π° ΡΠ»ΡΡΠ°ΠΉ Π²ΡΡ ΠΎΠ΄Π° ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π·Π° ΠΏΡΠΈΠ΄Π΅Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
CropForm cpFrm = new CropForm ();//ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΡΠΌΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ
do
{
flag = false;
cpFrm.CropXPosition = 0;
cpFrm.CropYPosition = 0;
cpFrm.CropWidth = imageHandler. Width;//ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ Π½Π° ΡΠΎΡΠΌΠ΅ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΡΠΈΠ½Ρ
cpFrm.CropHeight = imageHandler. Height;//ΠΈ Π²ΡΡΠΎΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
if (cpFrm.ShowDialog () == DialogResult. OK)
{
Rectangle rec = new Rectangle (cpFrm.CropXPosition, cpFrm. CropYPosition, cpFrm. CropWidth, cpFrm. CropHeight);//ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Ρ ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ
this.Cursor = Cursors. WaitCursor;//ΠΊΡΡΡΠΎΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ
imageHandler.RestorePrevious ();//ΡΠΎΡΠΊΠ° ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°
imageHandler.DrawOutCropArea (cpFrm.CropXPosition, cpFrm. CropYPosition, cpFrm. CropWidth, cpFrm. CropHeight);//Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
this.Invalidate ();
if (MessageBox.Show («ΠΡΠ΄Π΅Π»ΠΈΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ?», «ImageProcessing», MessageBoxButtons. OKCancel, MessageBoxIcon. Question) == DialogResult. OK)
{
try
{
cropX = cpFrm. CropXPosition; cropY = cpFrm. CropYPosition; widthImgCrop = cpFrm. CropWidth; heightImgCrop = cpFrm. CropHeight;
temp = (Bitmap)imageHandler.GetBitmap ();
Bitmap bmap = (Bitmap)temp.Clone ();// ΠΊΠΎΠΏΠΈΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
Graphics gr = Graphics. FromImage (bmap);//ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Graphics ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
RectangleF cloneRect = new RectangleF (cropX, cropY, widthImgCrop, heightImgCrop);// ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΡΠΎΠΎΡΠ² Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
System.Drawing.Imaging.PixelFormat format = bmap. PixelFormat;//
cloneBitmap = bmap. Clone (cloneRect, format);// Π²ΡΡΠ΅Π·ΠΊΠ° ΠΊΡΡΠΊΠ° ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΏΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ cloneRect
pictureBox1.Location = new System.Drawing.Point (cropX, cropY);// ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ pictureBox Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Π² ΠΊΠΎΠΎΡΠ΄ΠΈΠ°ΡΡ Π₯ Π£ Ρ. Π΅. Π½Π° ΠΌΠ΅ΡΡΠ΅ Π³Π΄Π΅ ΠΈ Π±ΡΠ»Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π° ΠΎΠ±Π»Π°ΡΡΡ
pictureBox1.Image = cloneBitmap;// ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ
pictureBox1.Size = new System.Drawing.Size (Convert.ToInt32(widthImgCrop), Convert. ToInt32(heightImgCrop));//ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΡΡΠΊΠΈ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π°
pictureBox1.Visible = true;//pictureBox1 Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ
imageHandler.RemoveCropAreaDraw ();
this.saveImgImg.Enabled = true;
this.deleteCrop.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show (this," ΠΡΠ΄Π΅Π»Π΅Π½Π° ΠΎΠ±Π»Π°ΡΡΡ Π²Π½Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ!", «ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅», MessageBoxButtons. OK);
flag=true;
}
}
else
{
imageHandler.RemoveCropAreaDraw ();//ΠΎΡΠΌΠ΅Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
}
this.AutoScroll = true;
this.AutoScrollMinSize = new Size (Convert.ToInt32(imageHandler.Width), Convert. ToInt32(imageHandler.Height));
this.Invalidate ();
this.Cursor = Cursors. Default;
imageHandler.RemoveCropAreaDraw ();
this.Invalidate ();
}
}
while (flag==true);
this.Invalidate ();
this.Cursor = Cursors. Default;
}
private void saveImg_Click (object sender, EventArgs e)//ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
{
if (DialogResult.OK == sDlg1. ShowDialog ())
{
imageHandler.SaveBitmap (sDlg1.FileName);
}
}
private void saveImgImg_Click (object sender, EventArgs e)
{
{
if (DialogResult.OK == sDlg2. ShowDialog ())
{
imageHandler.PasteTogether (cloneBitmap, cropX, cropY).Save (sDlg2.FileName);//ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
}
}
}
private void deleteCrop_Click1(object sender, EventArgs e)
{
pictureBox1.Visible = false;//pictureBox1 Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΠΌ
saveImgImg.Enabled = false;
deleteCrop.Enabled = false;
}
private void menuItemExit_Click (object sender, EventArgs e)
{
this.Close ();
}
}
}
namespace ImageProcessing
{
public class ImageHandler
{
private string _bitmapPath;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΡΠ° Π΄Π»Ρ ΡΠΎΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
public Bitmap _currentBitmap = null;//ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
int[][] colorOfPixel; // ΠΌΠ°ΡΡΠΈΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ (ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ) ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
int[][] beforeProcessing; // ΠΌΠ°ΡΡΠΈΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ
int trueWidth; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
int trueHeight;// Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ Π²ΡΡΠΎΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
bool isPicture = false;// Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
public bool IsPicture//ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅
{
get { return isPicture; }
}
public int Width//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠΈΠ½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
get { return colorOfPixel. Length; }
}
public int Height//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠΎΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
get { return colorOfPixel[0]. Length; }
}
public int TrueWidth//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠΈΠ½Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
get { return trueWidth; }
}
public int TrueHeight//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠΎΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
get { return trueHeight; }
}
public Bitmap GetBitmap ()//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
return _currentBitmap;
}
public string BitmapPath//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠΈ ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
get { return _bitmapPath; }
set { _bitmapPath = value; }
}
//Π ΠΠΠΠ’Π Π‘ ΠΠΠΠ£Π§ΠΠΠΠΠ ΠΠ ΠΠΠΠΠ ΠΠΠΠΠΠ― ΠΠΠ’Π ΠΠ¦Π« ΠΠΠΠ‘ΠΠΠΠ Π ΠΠΠΠ£Π§ΠΠΠΠ― ΠΠΠΠΠ ΠΠΠΠΠΠ― ΠΠ ΠΠΠ’Π ΠΠ¦Π« ΠΠΠΠ‘ΠΠΠΠ
public void SetBitmap (Bitmap bitmap)//Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
isPicture = true;
trueWidth = bitmap. Width;
trueHeight = bitmap. Height;
colorOfPixel = MakeMatrixs (bitmap);
beforeProcessing = (int[][])colorOfPixel.Clone () ;
CreateBitmap ();
}
void CreateBitmap ()//Π·Π°ΠΌΠ΅Π½Π° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ colorOfPixel
{
_currentBitmap = MakeBitmap (colorOfPixel, colorOfPixel. Length, colorOfPixel[0]. Length);
}
int[][] MakeMatrixs (Bitmap bitmap)//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
{
int height = bitmap. Height;
int width = bitmap. Width;
int[][] colorOfPixel = new int[width][]; //Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΡΡ
for (int i = 0; i < width; i++)
{
colorOfPixel[i] = new int[height]; //Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΡΡ
}
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
colorOfPixel[j][i] = bitmap. GetPixel (j, i).ToArgb ();//ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ
}
}
return colorOfPixel;//Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΌΠ°ΡΡΠΈΡΡ
}
public Bitmap MakeBitmap (int[][] matrix, int width, int height)//ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ
{
Bitmap bm = new Bitmap (width, height);//ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ Π½ΡΠΆΠ½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
bm.SetPixel (j, i, Color. FromArgb (matrix[j][i]));//Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
}
}
return bm;
}
//ΠΠ’ΠΠΠ ΠΠΠΠΠΠ ΠΠΠΠΠ ΠΠΠΠΠΠ―
public void RotateFlip (RotateFlipType rotateFlipType)//ΡΡΠ½ΠΊΡΠΈΡ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
beforeProcessing = colorOfPixel;
int[][] arry = new int[colorOfPixel.Length][]; //Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΡΡ
for (int i = 0; i < colorOfPixel. Length; i++)
{
arry[i] = new int[colorOfPixel[0]. Length];//Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΡΡ
}
if (rotateFlipType == RotateFlipType. RotateNoneFlipX)
{
for (int i = 0; i < colorOfPixel[0]. Length; i++)
{
for (int j = 0; j < colorOfPixel. Length; j++)
{
arry[colorOfPixel.Length — j — 1][i] = colorOfPixel[j][i]; //ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ Π₯
}
}
}
if (rotateFlipType == RotateFlipType. RotateNoneFlipY)
{
for (int i = 0; i < colorOfPixel[0]. Length; i++)
{
for (int j = 0; j < colorOfPixel. Length; j++)
{
arry[j][colorOfPixel[0]. Length — i — 1] = colorOfPixel[j][i]; //ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ Π£
}
}
}
colorOfPixel = null;
colorOfPixel = arry;
arry = null;
CreateBitmap ();
}
//ΠΠ«ΠΠΠΠΠΠΠ ΠΠΠΠΠ‘Π’Π
public void DrawOutCropArea (int xPosition, int yPosition, int width, int height)//Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
{
Bitmap bmap = _currentBitmap;//ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ
Graphics gr = Graphics. FromImage (bmap);//Graphics ΠΈΠ· ΡΠΈΡΡΠ½ΠΊΠ°
Brush cBrush = new Pen (Color.FromArgb (150, Color. White)).Brush;//ΠΊΠΈΡΡΡ Π΄Π»Ρ Π·Π°ΠΊΡΠ°ΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
Rectangle rect1 = new Rectangle (0, 0, _currentBitmap.Width, yPosition);//Π²ΡΠ΄Π΅Π»ΡΡ
Rectangle rect2 = new Rectangle (0, yPosition, xPosition, height);//ΡΠ΅ΡΡΡΠ΅
Rectangle rect3 = new Rectangle (0, (yPosition + height), _currentBitmap.Width, _currentBitmap.Height);//ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π±Π΅Π·
Rectangle rect4 = new Rectangle ((xPosition + width), yPosition, (_currentBitmap.Width — xPosition — width), height);//Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
gr.FillRectangle (cBrush, rect1);//Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ
gr.FillRectangle (cBrush, rect2);//ΡΡΠΈ
gr.FillRectangle (cBrush, rect3);//ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ
gr.FillRectangle (cBrush, rect4);//Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΡΠ»ΡΠΉ ΠΎΡΡΠ΅Π½ΠΎΠΊ
}
public Bitmap PasteTogether (Bitmap bmp, int x, int y)// ΡΠΊΠ»Π΅ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π£ ΠΈ Π₯ — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
//ΡΠΊΠ»Π΅ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΡΠΊΠΈ (0,0) ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ
{
int maxX = colorOfPixel. Length, maxY = colorOfPixel[0]. Length;
int[][] matrixBmp = MakeMatrixs (bmp);
int[][] newMatrixs;
if (maxX < x + bmp. Width)//ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
{
maxX = x + bmp. Width;
}
if (maxY < y + bmp. Height)//ΠΎΠΏΡΠ΅Π΄. Π²ΡΡΠΎΡΡ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
{
maxY = y + bmp. Height;
}
newMatrixs = new int[maxX][]; //Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ² Π½ΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
for (int i = 0; i < maxX; i++)//Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ² Π½ΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
{
newMatrixs[i] = new int[maxY];
}
for (int i = 0; i < colorOfPixel[0]. Length; i++)
{
for (int j = 0; j < colorOfPixel. Length; j++)
{
newMatrixs[j][i] = colorOfPixel[j][i]; //ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² Π½ΠΎΠ²ΡΡ
}
}
for (int i = 0; i < bmp. Height; i++)
{
for (int j = 0; j < bmp. Width; j++)
{
newMatrixs[j + x][i + y] = colorOfPixel[j][i]; //Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΠ»Π΅ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
}
}
return MakeBitmap (newMatrixs, maxX, maxY);//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΌΠ°ΡΠΈΠ²Ρ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ
}
public void RemoveCropAreaDraw ()//ΠΎΡΠΌΠ΅Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
{
CreateBitmap ();//Π·Π°ΠΌΠ΅Π½Π° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ΄Π΅Π»Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ Ρ ΡΠ°Π½ΡΡΠ΅ΠΉΡΡ ΠΌΠ°ΡΡΠΈΡΠ΅
}
//ΠΠΠΠΠΠΠΠΠΠ― ΠΠΠ’ΠΠ ΠΠΠΠ―Π¦ΠΠ―
public void BiInterp (int newX, int newY) //ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ | ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ newX — Π½ΠΎΠ²Π°Ρ Π΄Π»ΠΈΠ½Π½Π°, newY — Π½ΠΎΠ²Π°Ρ Π²ΡΡΠΎΡΠ°
{
colorOfPixel = Resample (colorOfPixel, colorOfPixel. Length, colorOfPixel[0]. Length, newX, newY);
CreateBitmap ();
}
int[][] Resample (int [][] colorOfPixel, int width, int height, int newX, int newY)//Π±ΠΈΠ»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ
{
int i, j;
int h, w;
float t;
float u;
float tmp;
float d1, d2, d3, d4;//ΠΊΠΎΡΡΠΈΡΠΈΠ΅Π½ΡΡ
int p1, p2, p3, p4; /* ΠΠΊΡΠ΅ΡΡΠ½ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»Ρ */
int p1Col, p2Col, p3Col, p4Col; //Π΄Π»Ρ ΠΎΡΠ±ΠΎΡΠ° ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΡΠ²Π΅ΡΠ°
int red, green, blue;
int[][] newMatrix = new int[newX][];
for (i = 0; i < newX; i++)
{
newMatrix[i] = new int[newY];
}
for (j = 0; j < newY; j++)
{
tmp = (float) (j) / (newY — 1) * (height — 1);
h = (int) Math. Floor (tmp);
if (h < 0)
{
h = 0;
}
else
{
if (h >= height — 1)
{
h = height — 2;
}
}
u = tmp — h;
for (i = 0; i < newX; i++)
{
tmp = (float)(i) / (newX — 1) * (width — 1);
w = (int) Math. Floor (tmp);
if (w < 0)
{
w = 0;
}
else
{
if (w >= width — 1)
{
w = width — 2;
}
}
t = tmp — w;
/* ΠΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ */
d1 = (1 — t) * (1 — u);
d2 = t * (1 — u);
d3 = t * u;
d4 = (1 — t) * u;
/* ΠΠΊΡΠ΅ΡΡΠ½ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ: a[i][j] */
p1 = colorOfPixel[w][h];
p2 = colorOfPixel[w + 1][h];
p3 = colorOfPixel[w + 1][h + 1];
p4 = colorOfPixel[w][h + 1];
p1Col = p1 & 255; // ΠΎΡΠ±ΠΈΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ blue
p2Col = p2 & 255;
p3Col = p3 & 255;
p4Col = p4 & 255;
blue = (byte)(p1Col * d1 + p2Col * d2 + p3Col * d3 + p4Col * d4);
p1Col = p1 & 65 280; /* ΠΎΡΠ±ΠΈΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ green*/ p1Col >>= 8;// ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
p2Col = p2 & 65 280; p2Col >>= 8;
p3Col = p3 & 65 280; p3Col >>= 8;
p4Col = p4 & 65 280; p4Col >>= 8;
green = (byte)(p1Col * d1 + p2Col * d2 + p3Col * d3 + p4Col * d4);
p1Col = p1 & 16 711 680; /* ΠΎΡΠ±ΠΈΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ red */ p1Col >>= 16; // ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
p2Col = p2 & 16 711 680; p2Col >>= 16;
p3Col = p3 & 16 711 680; p3Col >>= 16;
p4Col = p4 & 16 711 680; p4Col >>= 16;
red = (byte)(p1Col * d1 + p2Col * d2 + p3Col * d3 + p4Col * d4);
newMatrix[i][j] = (255 << 24) | (red << 16) | (green << 8) | blue;// ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° 255 — Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°Π»ΡΡΠ° ΠΊΠ°Π½Π°Π»Π°
}
}
return newMatrix;
}
//Π ΠΠΠΠ’Π Π‘ ΠΠΠΠΠ ΠΠ’ΠΠ ΠΠ Π¨ΠΠ ΠΠΠΠΠ
public void ResetBitmap ()//ΠΠΎΠ·Π²ΡΠ°Ρ Π½Π° ΡΠ°Π³ Π½Π°Π·Π°Π΄
{
if (beforeProcessing ≠ null && colorOfPixel ≠ null)//Π΅ΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ
{
int[][] arry = colorOfPixel;
colorOfPixel = beforeProcessing;
beforeProcessing = arry;
CreateBitmap ();
arry = null;
}
}
public void SaveBitmap (string saveFilePath)//ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
{
_bitmapPath = saveFilePath;
if (System.IO.File.Exists (saveFilePath))
System.IO.File.Delete (saveFilePath);
GetBitmap ().Save (saveFilePath);
}
public void RestorePrevious ()//ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ
{
beforeProcessing = (int[][])colorOfPixel.Clone ();//ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ=ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
}}}