ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ растровых графичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π”Π°Π»Π΅Π΅ яркостной ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ 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 ();//изобраТСния Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ выдСлСния=Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ изобраТСния

}}}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ