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

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° изобраТСния Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…

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

ИзмСнСниС ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния). ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ изобраТСния Π² n Ρ€Π°Π·, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль Π² ΡΡ‚ΠΎΠΊΠ΅ повторяСтся n Ρ€Π°Π· ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ строка повторяСтся n Ρ€Π°Π·. ΠŸΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ изобраТСния Π² n Ρ€Π°Π· ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΡˆΠ°Π³ΠΎΠΌ n, ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ nxn считаСм срСдний Ρ†Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π Π°Π±ΠΎΡ‚Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ рис. 2.4.4. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° изобраТСния Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ образования Российской Π€Π΅Π΄Π΅Ρ€Π°Ρ†ΠΈΠΈ

Новосибирский ГосударствСнный ВСхничСский УнивСрситСт

ΠšΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° изобраТСния Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…

Π€Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚: АВВЀ

Π“Ρ€ΡƒΠΏΠΏΠ°: АВВ-919

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»: Π ΠΎΠΆΠΊΠΎΠ² А. Π•.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»: Π ΠΎΠΌΠ°Π½ΠΎΠ² Π•. Π›.

Новосибирск

1. Π—Π°Π΄Π°Π½ΠΈΠ΅

2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ описаниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

2.1 Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π³Ρ€Π°Ρ„ичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…

2.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° BMP Ρ„Π°ΠΉΠ»Π°

2.3 Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ изобраТСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

2.4 ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ

2.5 ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ структура Π΄Π°Π½Π½Ρ‹Ρ…

2.5.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

2.5.2 ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ

3. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС

3.1. Класс BMP

3.1.1 Π”Π°Π½Π½Ρ‹Π΅ класса BMP

3.1.2 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса BMP

3.2. Класс QUEUE (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ)

3.2.1 Π”Π°Π½Π½Ρ‹Π΅ класса QUEUE

3.2.2 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса QUEUE

4. ОписаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρ‹

4.1 Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

4.2 УмСньшСниС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности

4.3 Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния

4.4 Π’Ρ‹Π²ΠΎΠ΄Ρ‹

5. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

1. Π—Π°Π΄Π°Π½ΠΈΠ΅ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ» Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ растровый Ρ„Π°ΠΉΠ» изобраТСния (bmp), выполняя Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ прСобразования изобраТСния. Π”ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ограничСния Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (256-Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈ Ρ‚. ΠΏ).

ИзмСнСниС контрастности ΠΈ ΡΡ€ΠΊΠΎΡΡ‚ΠΈ изобраТСния.

ИзмСнСниС ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° изобраТСния.

УмСньшСниС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности ΠΏΡƒΡ‚Π΅ΠΌ усрСднСния Π³Ρ€ΡƒΠΏΠΏ пиксСлСй (3×3).

ИскаТСниС изобраТСния («Π»ΠΈΠ½Π·Π°»).

РисованиС элСмСнтарных графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ‚ΠΎΡ‡ΠΊΠΈ, Π»ΠΈΠ½ΠΈΠΈ, окруТности, Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ).

НалоТСниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅, с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°.

Π—Π°Π»ΠΈΠ²ΠΊΠ°.

2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ описаниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой консольноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ичСскими изобраТСниями. Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈΠ·Π»ΠΎΠΆΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π³Ρ€Π°Ρ„ичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ рассмотрим структурноС описаниС созданной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

2.1 Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π³Ρ€Π°Ρ„ичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… Для хранСния графичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы Π΅Ρ‘ Π·Π°ΠΏΠΈΡΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ графичСскими Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ. ГрафичСскиС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ дСлятся Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΈ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹Π΅.

Π’ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… изобраТСния хранятся Π² Π²ΠΈΠ΄Π΅ совокупности гСомСтричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π»ΠΈΠ½ΠΈΠΈ, сплайны ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SVG Ρ„ΠΎΡ€ΠΌΠ°Ρ‚).

Π’ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… изобраТСния хранятся Π² Π²ΠΈΠ΄Π΅ сСтки пиксСлСй ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡Π΅ΠΊ Ρ†Π²Π΅Ρ‚ΠΎΠ² (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ). Растровых Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ: BMP, ECW, GIF, ICO, PNG, JPEG ΠΈ Π΄Ρ€.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим BMP Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π‘ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Windows ΠΈ OS/2. Π€Π°ΠΉΠ»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° BMP ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ .bmp, .dib ΠΈ .rle. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°Π½Π½Ρ‹Π΅ этого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов RES ΠΈ Π² PE-Ρ„Π°ΠΉΠ»Ρ‹.

Π“Π»ΡƒΠ±ΠΈΠ½Π° Ρ†Π²Π΅Ρ‚Π° Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 1, 4, 8, 16, 24, 32, 48 Π±ΠΈΡ‚ Π½Π° ΠΏΠΈΠΊΡΠ΅Π», ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния 65 535Π§65535 пиксСлов.

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ BMP Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сТатия ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ RLE, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ с Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ сТатиСм, ΠΈ ΠΈΠ·-Π·Π° большого ΠΎΠ±ΡŠΡ‘ΠΌΠ° BMP Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, Π³Π΄Π΅ для сТатия Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ PNG ΠΈ Π±ΠΎΠ»Π΅Π΅ старый GIF.

2.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° BMP Ρ„Π°ΠΉΠ»Π° Моя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с BMP Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ Ρ†Π²Π΅Ρ‚Π° 24 Π±ΠΈΡ‚Π° Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡŒ, Π±Π΅Π· сТатия, Π±Π΅Π· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ изобраТСния, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ пиксСлу ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π°ΠΉΡ‚Π°, хранящиС ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° B, G, R; (Π½Π΅ R, G, B). Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ структуру Ρ„Π°ΠΉΠ»Π°:

24-разрядный BMP-Ρ„Π°ΠΉΠ» состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… частСй:

1) Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π°

2) Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ изобраТСния

3) Π‘Π°ΠΌΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.2 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части.

Π’Π°Π±Π»ΠΈΡ†Π° 2.2

Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…

Π”Π»ΠΈΠ½Π° поля Π² Π±Π°ΠΉΡ‚Π°Ρ…

ОписаниС поля

Π—ΠΠ“ΠžΠ›ΠžΠ’ΠžΠš ЀАЙЛА

Код 424Dh — Π‘ΡƒΠΊΠ²Ρ‹ 'BM'

Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…

0 (Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅)

0 (Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅)

Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся само ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (растр), Ρ€Π°Π²Π½ΠΎ 54

Π—ΠΠ“ΠžΠ›ΠžΠ’ΠžΠš Π˜Π—ΠžΠ‘Π ΠΠ–Π•ΠΠ˜Π―

Π Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π² Π±Π°ΠΉΡ‚Π°Ρ…, Ρ€Π°Π²Π½ΠΎ 40

Π¨ΠΈΡ€ΠΈΠ½Π° изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…

Высота изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…

Число плоскостСй, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 1

Π‘ΠΈΡ‚/пиксСл: 24

Π’ΠΈΠΏ сТатия, Ρ€Π°Π²Π½ΠΎ 0

0 ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатого изобраТСния Π² Π±Π°ΠΉΡ‚Π°Ρ….

Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, пиксСл/ΠΌ

Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, пиксСл/ΠΌ

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ «Π²Π°ΠΆΠ½Ρ‹Ρ…» Ρ†Π²Π΅Ρ‚ΠΎΠ², Ρ€Π°Π²Π½ΠΎ 0.

БАМО Π˜Π—ΠžΠ‘Π ΠΠ–Π•ΠΠ˜Π•

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сохраняСтся построчно Π‘ΠΠ˜Π—Π£-Π’Π’Π•Π Π₯. Для хранСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки выдСляСтся ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ 4 количСство Π±Π°ΠΉΡ‚. Π’ Π½Π΅Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Π±Π°ΠΉΡ‚Π°Ρ… хранится мусор. Π‘Ρ‚Π°Ρ€ΡˆΠ΅ΠΌΡƒ Π±ΠΈΡ‚Ρƒ ΠΈΠ»ΠΈ Ρ‚Π΅Ρ‚Ρ€Π°Π΄Π΅ соотвСтствуСт самый Π»Π΅Π²Ρ‹ΠΉ пиксСл.

2.3 Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ изобраТСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Π²ΠΈΠ΄Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… (BMP), состоящСй ΠΈΠ·: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, хранящих Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π³Ρ€Π°Ρ„ичСском Ρ„Π°ΠΉΠ»Π΅, ΠΈ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ (MBMP), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ нСпосрСдствСнно Ρ†Π²Π΅Ρ‚Π° пиксСлСй. Π•Π³ΠΎ структура Ρ‚Π°ΠΊΠΎΠ²Π°: массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° biHeight массивов Π±Π°ΠΉΡ‚ΠΎΠ² (строк изобраТСния), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат biWidth * 3 + n ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹Π΅ 3 элСмСнта строки ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ†Π²Π΅Ρ‚ пиксСля Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB, начиная с Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ элСмСнта. Π Π°Π·ΠΌΠ΅Ρ€ массива с ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌΠΈ ΠΊΡ€Π°Ρ‚Π΅Π½ 4, это обСспСчиваСтся числом n. Π’Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ рисунком 2.3.

2.4 ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ прСдусмотрСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

Β· Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ (имя вводится ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹),

Β· созданиС пустого изобраТСния (Π±Π΅Π»ΠΎΠ³ΠΎ, с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вводятся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹),

Β· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (Ρ€Π°Π·ΠΌΠ΅Ρ€ графичСского Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ сохранСнии Π΄Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния Π½Π° ΠΆΠ΅ΡΡ‚ΠΊΠΈΠΉ диск),

Β· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния (ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ Π²Ρ‹ΡΠΎΡ‚Π°),

Β· рисованиС графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² (Ρ‚ΠΎΡ‡ΠΊΠ°, линия, ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ, Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. Π˜Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Ρ€ΠΈΡ. 2.4.1

рис 2.4.1

Β· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ яркости (Π½Π° Ρ€ΠΈΡ. 2.4.2Π° исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π° Ρ€ΠΈΡ. 2.4.2Π± с ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½ΠΎΠΉ ΡΡ€ΠΊΠΎΡΡ‚ΡŒΡŽ).

рис. 2.4.2Π° рис 2.4.2Π±

Β· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ контрастности (Π½Π° Ρ€ΠΈΡ. 2.4.3Π° исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π° Ρ€ΠΈΡ. 2.4.3Π± с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ).

рис. 2.4.3Π° рис. 2.4.3Π±

Β· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния). ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ изобраТСния Π² n Ρ€Π°Π·, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль Π² ΡΡ‚ΠΎΠΊΠ΅ повторяСтся n Ρ€Π°Π· ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ строка повторяСтся n Ρ€Π°Π·. ΠŸΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ изобраТСния Π² n Ρ€Π°Π· ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΡˆΠ°Π³ΠΎΠΌ n, ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ nxn считаСм срСдний Ρ†Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π Π°Π±ΠΎΡ‚Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ рис. 2.4.4.

Рис. 2.4.4

Β· Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ†Π²Π΅Ρ‚Π° Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ (Π½Π° Ρ€ΠΈΡ. 2.4.5Π° ΠΈ Ρ€ΠΈΡ. 2.4.5Π± исходныС изобраТСния, Π° Π½Π° Ρ€ΠΈΡ. 2.4.5 Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚).

рис. 2.4.5Π° рис. 2.4.5брис.2.4.5Π²

Β· искаТСниС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‰Π΅ΠΉ Π»ΠΈΠ½Π·ΠΎΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ задаСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ эффСкт. На Ρ€ΠΈΡ. 2.4.6 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

рис. 2.4.6

Β· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° пиксСля, с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ,

Β· ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности. Под ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности здСсь понимаСтся усрСднСниС всСх Ρ†Π²Π΅Ρ‚ΠΎΠ² пиксСлСй изобраТСния, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ… 8 сосСдних пиксСлСй.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля изобраТСния подсчитываСтся сумма красного, Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΈΠ½Π΅Π³ΠΎ ΠΊΠ°Π½Π°Π»ΠΎΠ² Ρ†Π²Π΅Ρ‚Π° Π΅Π³ΠΎ ΠΈ Π²ΡΠ΅Ρ… Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… сосСдСй (см. Ρ€ΠΈΡ. 2.4.7 сосСди ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ 1, Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ пиксСль 2, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ 3), Π·Π°Ρ‚Π΅ΠΌ эти суммы дСлятся Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ сосСдСй + 1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния ΠΊΠ°Π½Π°Π»ΠΎΠ² Ρ†Π²Π΅Ρ‚Π° Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ пиксСль. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся эффСкт размывания изобраТСния.

рис. 2.4.7

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Ρ€ΠΈΡ. 2.4.8(Π° — исходный, Π± — Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚)

рис. 2.4.8арис.2.4.8Π±

Β· Π·Π°Π»ΠΈΠ²ΠΊΠ°. Π—Π°Π»ΠΈΠ²ΠΊΠ° — ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ области, «ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ» с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ элСмСнтом (задаСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ) Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС Ρ‚ΠΎΡ‡Π΅ΠΊ растрового изобраТСния, ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Ρƒ Π²ΡΠ΅Ρ… этих Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ области Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ (Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Ρ€ΠΈΡ. 2.4.8(Π° — исходный, Π± — Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚) рис. 2.4.8Π° рис. 2.4.8Π± ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Π΄Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ, которая ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ области. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ эту Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ своих «ΡΠΎΡΠ΅Π΄Π΅ΠΉ» (Ρ‚ΠΎΡ‡ΠΊΠΈ свСрху, снизу, слСва, справа), Ссли «ΡΠΎΡΠ΅Π΄» ΠΈΠΌΠ΅Π΅Ρ‚ замСняСмый Ρ†Π²Π΅Ρ‚, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π΅Π³ΠΎ «ΡΠΎΡΠ΅Π΄Π΅ΠΉ» ΠΈ Ρ‚. Π΄.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, для хранСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ «ΡΠΎΡΠ΅Π΄Π΅ΠΉ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹.

2.5 ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ структура Π΄Π°Π½Π½Ρ‹Ρ…

2.5.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ — структура Π΄Π°Π½Π½Ρ‹Ρ… с Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½ΠΎΠΉ доступа ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ «ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΡˆΡ‘Π» — ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅Π»» (FIFO, First In — First Out). Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ лишь Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΡ€ΠΈ этом Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ удаляСтся.

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° «Π·Π°Π»ΠΈΠ²ΠΊΠ°», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, которая прСдставлСна Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ… (см. Ρ€ΠΈΡ. 2.5.1).

Рис. 2.5.1

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ двухсвязного списка. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ beg ΠΈ end Ρ‚ΠΈΠΏΠ° node (элСмСнт ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ) хранят адрСса ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ элСмСнта соотвСтствСнно. ЦСлочислСнная пСрСмСнная sz Ρ…Ρ€Π°Π½ΠΈΡ‚ количСство элСмСнтов ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° структура класса node:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ x, y — это ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ пиксСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° «Π·Π°Π»ΠΈΠ²ΠΊΠ°». node * next, prev — это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт соотвСтствСнно.

2.5.2 ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ.

Π‘ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ прСдусмотрСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

Β· Вставка элСмСнта Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ псСвдокод Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°:

Алгоритм вставки элСмСнта Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (Push (x, y)):

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт, с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌΠΈ значСниями ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ x, y

ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:

Если ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ пуста, Ρ‚ΠΎ beg ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ адрСс этого элСмСнта Π˜Π½Π°Ρ‡Π΅ добавляСм ΠΏΠ΅Ρ€Π΅Π΄ end Π΄Π°Π½Π½Ρ‹ΠΉ элСмСнт

end присваиваСм адрСс этого элСмСнта ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика элСмСнтов Π’Ρ‹Ρ…ΠΎΠ΄

Β· Π˜Π·ΡŠΡΡ‚ΠΈΠ΅ элСмСнта ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ псСвдокод Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°:

Алгоритм ΠΈΠ·ΡŠΡΡ‚ΠΈΡ элСмСнта ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (Pop (x, y)):

Если ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ пуста, Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ пиксСла) УдаляСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт:

Если элСмСнт ΠΎΠ΄ΠΈΠ½, Ρ‚ΠΎ ΡƒΠ΄Π°Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΈ ΠΎΠ±Π½ΡƒΠ»ΡΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ beg ΠΈ end

Π˜Π½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ beg Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт ΠΈ ΡƒΠ΄Π°Π»ΡΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика элСмСнтов Π’Ρ‹Ρ…ΠΎΠ΄

Β· ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ количСства элСмСнтов ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

3. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, хранятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… класса BMP. Π’ Π΄Π°Π½Π½ΠΎΠΌ классС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Рассмотрим ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС.

3.1 Класс BMP

3.1.1 Π”Π°Π½Π½Ρ‹Π΅ класса BMP

Β· Π˜ΠœΠ•ΠΠ ΠΠžΠ’Π«Π₯ Π’Π˜ΠŸΠžΠ’ ДАННЫΠ₯ Для описания Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π΄Π°Π½Π½ΠΎΠΌ кассС вводятся Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ²:

typedef short WORD;

typedef unsigned DWORD;

typedef long LONG;

typedef unsigned char BYTE;

Β· ДАННЫЕ О Π€ΠΠ™Π›Π•

WORD bfType; // Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°, символы «BM»

DWORD bfSize; // Ρ€Π°Π·ΠΌΠ΅Ρ€ всСго Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…

WORD bfReserved1;

WORD bfReserved2; // Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ //ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΡƒΠ»ΠΈ

DWORD bfOffBits; // содСрТит смСщСниС Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΎΡ‚ //Π½Π°Ρ‡Π°Π»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π΄ΠΎ Π±ΠΈΡ‚ΠΎΠ² изобраТСния, Ρ€Π°Π²Π΅Π½ 54

Β· ДАННЫЕ О Π˜Π—ΠžΠ‘Π ΠΠ–Π•ΠΠ˜Π˜

DWORD biSize; // Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ //ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Ρ€Π°Π²Π΅Π½ 40

LONG biWidth; // ΡˆΠΈΡ€ΠΈΠ½Π° изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…

LONG biHeight; // высота изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…

WORD biPlanes; // число плоскостСй, Ρ€Π°Π²Π½ΠΎ 1

WORD biBitCount; // ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ количСство Π±ΠΈΡ‚ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡŒ, Ссли 24 разрядноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎ Ρ€Π°Π²Π½ΠΎ 24 Ρ‚.ΠΊ. ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Ρ‘Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² (RGB Ρ„ΠΎΡ€ΠΌΠ°Ρ‚).

DWORD biCompression; // Ρ‚ΠΈΠΏ сТатия. Если Ρ€Π°Π½ΠΎ BI_RGB //= 0, Ρ‚ΠΎ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся

DWORD biSizeImage; // 0 ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатого //изобраТСния Π² Π±Π°ΠΉΡ‚Π°Ρ…. ΠŸΡ€ΠΈ 24 разрядном Ρ€Π°Π²Π½ΠΎ 0.

LONG biXPelsPerMet; // Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, //пиксСл/ΠΌ

LONG biYPelsPerMet; // Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, //пиксСл/ΠΌ

DWORD biClrUsed; // ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²

DWORD biClrImportant;// ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ «Π²Π°ΠΆΠ½Ρ‹Ρ…» Ρ†Π²Π΅Ρ‚ΠΎΠ²

Β· ИНЀОРМАЦИЯ О ΠŸΠ˜ΠšΠ‘Π•Π›Π―Π₯

BYTE **MBMP; // массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΠΈ изобраТСния

3.1.2 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса BMP

Ѐункция ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Ρ†Π²Π΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ RGB:

void Col_To_RGB (int, int*, int*, int*);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся Ρ†Π²Π΅Ρ‚, Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€):

0 — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ

1 — Π±Π΅Π»Ρ‹ΠΉ

2 — синий

3 — Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ

4 — красный

5 — ΠΏΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ

6 — ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ

7 — Ρ†ΠΈΠ°Π½ΠΎΠ²Ρ‹ΠΉ, ВозвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB (Ρ‚Ρ€ΠΈ послСдних ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°).

Ѐункция Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:

int Load (char FileNames[]);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ строка это имя графичСского Ρ„Π°ΠΉΠ»Π°. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, Ссли ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΎΡΡŒ ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΎΡΡŒ, староС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сохраняСтся.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ псСвдокод Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π°:

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ: Ρ‚ΠΈΠΏΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΈ Ρ‚. Π΄. Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Если Ρ‚ΠΈΠΏ Π½Π΅ ΡΠΎΠΎΡ‚вСтствуСт 24-разрядному ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ BMP, Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния (запуск дСструктора) Π—Π°ΠΏΠΈΡΡŒ Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ динамичСского массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (количСство элСмСнтов Π² ΡΡ‚Ρ€ΠΎΠΊΠ°Ρ… массива Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌ 4)

Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ снизу Π²Π²Π΅Ρ€Ρ….

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Ѐункция сохранСния изобраТСния Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:

void Save (char FileNames[]);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ строка это имя графичСского Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ сохранСно ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Если Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΡƒΠΆΠ΅ сущСствуСт, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ пСрСзаписан.

ВыполняСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ Π·Π°ΠΏΠΈΡΡŒ Π² Π½Π΅Π³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π΅, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈ ΡΠ°ΠΌΠΈΡ… Ρ†Π²Π΅Ρ‚ΠΎΠ² пиксСлСй ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠ³ΠΎ массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

Ѐункция получСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² Π±Π°ΠΉΡ‚Π°Ρ…:

unsigned FileSize ();

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² Π±Π°ΠΉΡ‚Π°Ρ….

Ѐункция получСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния:

void Dimensions (int *W, int *H);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ это ΡˆΠΈΡ€ΠΈΠ½Π° (W) ΠΈ Π²Ρ‹ΡΠΎΡ‚Π° (H) изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ….

Ѐункция рисования пиксСла:

int PutPixel (int x, int y, int color);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ x, y ΠΈ Ρ†Π²Π΅Ρ‚ color Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (см. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ void Col_To_RGB).

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ пиксСль Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΈ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся 0.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ рисования происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: сначала Ρ†Π²Π΅Ρ‚ пСрСводится Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ RGB ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Col_To_RGB, Π·Π°Ρ‚Π΅ΠΌ Π² ΠΌΠ°ΡΡΠΈΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ вносятся измСнСния Π½ΡƒΠΆΠ½ΠΎΠΉ Ρ‚Ρ€ΠΎΠΊΠΈ элСмСнтов, ΠΏΡ€ΠΈ этом учитываСтся, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ строки располоТСны снизу-Π²Π²Π΅Ρ€Ρ… ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ†Π²Π΅Ρ‚Π° располоТСны Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ BGR.

Ѐункция рисования пиксСла (RGB):

int PutPixelRGB (int x, int y, int red, int green, int blue);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ x, y ΠΈ Ρ†Π²Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB (Ρ‚Ρ€ΠΈ Ρ†Π΅Π»Ρ‹Ρ… числа ΠΎΡ‚ 0 Π΄ΠΎ 255 ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° ΡΡ€ΠΊΠΎΡΡ‚ΡŒ красного, Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΈΠ½Π΅Π³ΠΎ ΠΊΠ°Π½Π°Π»Π° Ρ†Π²Π΅Ρ‚Π° — Ρ‚Ρ€ΠΈ послСдних ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°).

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ пиксСль Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΈ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся 0.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ рисования происходит Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PutPixel, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Ρ†Π²Π΅Ρ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

Ѐункция считывания Ρ†Π²Π΅Ρ‚Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ пиксСля:

int GetPixel (int x, int y, int *red, int *green, int *blue);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ x, y. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ послСдних ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB.

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ red, green, blue ΠΏΡ€ΠΈΠΌΡƒΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ пиксСла ΠΈ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ 1, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ится 0.

Ѐункция рисования Π»ΠΈΠ½ΠΈΠΈ:

int DrawLine (int x1, int y1, int x2, int y2, int color);

Ѐункция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π°Ρ‡Π°Π»Π° x1, y1 ΠΈ ΠΊΠΎΠ½Ρ†Π° x2, y2 Π»ΠΈΠ½ΠΈΠΈ, Ρ†Π²Π΅Ρ‚ color Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (см. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ void Col_To_RGB).

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° Π»ΠΈΠ½ΠΈΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΡ нарисуСтся ΠΈ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ 1, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ 0.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π‘Ρ€Π΅Π·Π΅Π½Ρ…Π΅ΠΌΠ°.

Ѐункция рисования Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°:

int DrawQuadrangle (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int color);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° x1, y1, x2, y2, x3, y3, x4, y4 ΠΈ Ρ†Π²Π΅Ρ‚ color Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (см. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ void Col_To_RGB).

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ 0.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ рисования происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΠΈΡΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π»ΠΈΠ½ΠΈΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ.

Ѐункция рисования Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°:

int DrawTriangle (int x1, int y1, int x2, int y2, int x3, int y3, int color);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° x1, y1, x2, y2, x3, y3 ΠΈ Ρ†Π²Π΅Ρ‚ color Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (см. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ void Col_To_RGB).

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ 0.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ рисования происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΠΈΡΡƒΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π»ΠΈΠ½ΠΈΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ.

Ѐункция рисования окруТности:

int DrawCircle (int x0, int y0, int radius, int color);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° окруТности x0, y0, радиус ΠΈ Ρ†Π²Π΅Ρ‚ color Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (см. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ void Col_To_RGB).

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ 0.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π‘Ρ€Π΅Π·Π΅Π½Ρ…Π΅ΠΌΠ° для окруТностСй.

Ѐункция измСнСния яркости изобраТСния:

void Bright (int x);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся коэффициСнт x ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ яркости ΠΎΡ‚ -255 Π΄ΠΎ 255. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ коэффициСнтС ΡΡ€ΠΊΠΎΡΡ‚ΡŒ увСличиваСтся, ΠΈΠ½Π°Ρ‡Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ измСнСния яркости выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Ρ†Π²Π΅Ρ‚Π° всСх пиксСлСй прибавляСтся (ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ отнимаСтся (ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅) коэффициСнт x.

Ѐункция измСнСния контрастности изобраТСния:

void Contrast (int e);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся коэффициСнт e ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ контрастности ΠΎΡ‚ -100 Π΄ΠΎ 100. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ коэффициСнтС ΠΊΠΎΠ½Ρ‚Ρ€Π°ΡΡ‚Π½ΠΎΡΡ‚ΡŒ увСличиваСтся, ΠΈΠ½Π°Ρ‡Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ измСнСния контрастности выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: вычисляСтся срСдняя ΡΡ€ΠΊΠΎΡΡ‚ΡŒ изобраТСния Y, Π° Π·Π°Ρ‚Π΅ΠΌ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ†Π²Π΅Ρ‚Π° всСх пиксСлСй ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ .

Ѐункция измСнСния Ρ†Π²Π΅Ρ‚Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°:

void QuadrangleRGB (int x1, int y1, int x2, int y2, int rr, int gg, int bb);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ x1, y1 ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ x2, y2 ΡƒΠ³Π»ΠΎΠ² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ Ρ‚Ρ€ΠΈ значСния Ρ†Π²Π΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB. Если ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ†Π²Π΅Ρ‚Π° Ρ€Π°Π²Π½Π° -1, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» останСтся Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Если Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π° Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

Ѐункция налоТСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅:

void Imposition (BMP &T, int x, int y, int r, int g, int b);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ: ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ &T, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° x, y Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ изобраТСния Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ‚Ρ€ΠΈ значСния Ρ†Π²Π΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ Π² Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. Если значСния ΠΊΠ°Π½Π°Π»ΠΎΠ² Ρ†Π²Π΅Ρ‚Π° Ρ€Π°Π²Π½Ρ‹ -1 -1 -1, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ пиксСли Ρ†Π²Π΅Ρ‚Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°, Ссли -2 -2 -2, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Ѐункция ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности изобраТСния:

void Resolution ();

Ѐункция ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ усрСднСния Π³Ρ€ΡƒΠΏΠΏ пиксСлСй 3×3.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π² ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄Π΅:

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС пиксСли Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ изобраТСния Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ подсчитываСм сумму ΠΊΠ°Π½Π°Π»ΠΎΠ² Ρ†Π²Π΅Ρ‚Π° Π΅Π³ΠΎ ΠΈ 8 Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… сосСдСй Находим срСдниС значСния ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ дСлСния сумм Π½Π° 9

ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π’Ρ‹Ρ…ΠΎΠ΄ Ѐункция измСнСния ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° изобраТСния:

void Zoom (int k);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся коэффициСнт k ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°, Ссли ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ изобраТСния Π² k Ρ€Π°Π·, ΠΈΠ½Π°Ρ‡Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Π² k Ρ€Π°Π·. Если k=0 Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚.

Алгоритм Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рассмотрСн Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΠΎΠΌ описании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Ѐункция Π·Π°Π»ΠΈΠ²ΠΊΠΈ:

void FloodFill (int x, int y, int rz, int gz, int bz);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π°Π»ΠΈΠ²ΠΊΠΈ x, y ΠΈ Ρ‚Ρ€ΠΈ значСния rz, gz, bz Ρ†Π²Π΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, которая содСрТит Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚ этой Ρ‚ΠΎΡ‡ΠΊΠΈ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ псСвдокод Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° «Π·Π°Π»ΠΈΠ²ΠΊΠΈ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для хранСния Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… «ΡΠΎΡΠ΅Π΄Π΅ΠΉ»:

Π—Π°Π»ΠΈΠ²ΠΊΠ° (элСмСнт, замСняСмый Ρ†Π²Π΅Ρ‚, Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ):

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Q ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

Если Ρ†Π²Π΅Ρ‚ элСмСнта — Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ†Π²Π΅Ρ‚, Π²Ρ‹Ρ…ΠΎΠ΄.

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† Q.

Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Q Π½Π΅ ΠΏΡƒΡΡ‚Π°:

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ n ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Q

Если Ρ†Π²Π΅Ρ‚ n — замСняСмый Ρ†Π²Π΅Ρ‚, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ.

Π’Π·ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠ· Q

Если Ρ†Π²Π΅Ρ‚ элСмСнта ΠΊ Π·Π°ΠΏΠ°Π΄Ρƒ ΠΎΡ‚ n — замСняСмый Ρ†Π²Π΅Ρ‚:

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠΌ этого элСмСнта Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ этот элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† Q

Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… сосСдСй Π’Ρ‹Ρ…ΠΎΠ΄.

Ѐункция измСнСния изобраТСния, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‰Π΅ΠΉ Π»ΠΈΠ½Π·ΠΎΠΉ:

void Lens (int x, int y, int r, int k);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° Π»ΠΈΠ½Π·Ρ‹ x, y, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Ρ‘ Ρ€Π°Π΄ΠΈΡƒΡΠ° r ΠΈ ΠΊΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ k.

ВыполняСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° искаТСния Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y ΠΈ Ρ€Π°Π΄ΠΈΡƒΡΠΎΠΌ r, эффСктом Π»ΠΈΠ½Π·Ρ‹. ΠŸΡ€ΠΎΡ†Π΅ΡΡ искаТСния рСализуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° даСтся ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π΄Π²ΡƒΠΌ направлСниям. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

for (i = -ro; i <= ro; i++)// ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΊΡ€ΡƒΠ³Π°

{

int ogr = sqrt ((float)(ro*ro — i*i));

for (int j = -ogr; j <= ogr; j++)

{

yy = -k*sin (3.14*i/(2*ro));// искаТСниС по y

xx = -k*sin (3.14*j/(2*abs (ogr)));// искаТСниС по x

// Ссли Ρ‚ΠΎΡ‡ΠΊΠ° с Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Π½Π΅ Π²Ρ‹ΡˆΠ»Π° Π·Π° Π³Ρ€Π°Π²Π½ΠΈΡ†Ρƒ ΠΊΡ€ΡƒΠ³Π°, рисуСм Π΅Ρ‘

if (abs (i + yy) < ro && abs (j + xx) < abs (ogr))

{

// считываСм Ρ†Π²Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ со ΡΡ‚Π°Ρ€Ρ‹ΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ

TMP.GetPixel (x + j, y + i, r, g, b);

// записываСм пиксСль Π½Π° Π½ΠΎΠ²ΠΎΠ΅ мСсто

PutPixelRGB (x + j + xx, y + i + yy, *r, *g, *b);

}}}

3.2 Класс QUEUE ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс NODE

Класс QUEUE прСдставляСт собой структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ двусвязный список

3.2.1 Π”Π°Π½Π½Ρ‹Π΅ класса ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ ΠΊΠ»Π°ΡΡΠ° элСмСнта ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

int x, y — элСмСнты класса node, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для хранСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ пиксСля

node *next — элСмСнт класса node, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

node *prev — элСмСнт класса node, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

int sz — элСмСнт класса QUEUE, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для хранСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ количСство элСмСнтов Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

node *beg, *end — элСмСнт класса QUEUE, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

3.2.2 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса QUEUE

Ѐункция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:

int Size ();

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство элСмСнтов ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Ѐункция, ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π°Ρ элСмСнт Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ:

void Push (int x1, int y1);

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° значСния (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ пиксСла) x1, y1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Ѐункция, ΠΈΠ·Ρ‹ΠΌΠ°ΡŽΡ‰Π°Ρ элСмСнт ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:

void Pop (int *x1, int *y1)

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²Π° значСния (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ пиксСла) x1, y1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ значСниями ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π”Π°Π½Π½Ρ‹ΠΉ элСмСнт ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ удаляСтся.

4. ОписаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Для описания Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, опрСдСлСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ протСстируСм Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅: ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния (ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ с ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ коэффициСнтом).

ВСоритичСски, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, всС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ‚.ΠΊ. ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ всС Ρ‚ΠΎΡ‡ΠΊΠΈ изобраТСния ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ подмноТСство Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, зависит ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа Ρ‚ΠΎΡ‡Π΅ΠΊ.

4.1 Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π’Π°Π±Π»ΠΈΡ†Π° 4.1

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ изобраТСния

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹

Рис. 4.1

4.2 УмСньшСниС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности Π’Π°Π±Π»ΠΈΡ†Π° 4.2

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ изобраТСния

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹

Рис. 4.2

Π’Π°Π±Π»ΠΈΡ†Π° 4.3

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ изобраТСния

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ сравнСний

Рис. 4.3

4.3 Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния Π’Π°Π±Π»ΠΈΡ†Π° 4.4

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ увСличСния изобраТСния

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹

Рис. 4.4

Π’Π°Π±Π»ΠΈΡ†Π° 4.5

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ увСличСния изобраТСния

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ сравнСний

Рис. 4.5

4.4 Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Из ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ², Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ зависимости практичСски ΡΠΎΠ³Π»Π°ΡΡƒΡŽΡ‚ΡΡ с Ρ‚СорСтичСскими свСдСниями, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

Β· ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ количСства Ρ‚ΠΎΡ‡Π΅ΠΊ изобраТСния ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ увСличиваСтся количСство массовых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… сравнСний) Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (см. Ρ€ΠΈΡ. 4.3, 4.5).

Β· Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ количСства Ρ‚ΠΎΡ‡Π΅ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ растСт «Π³Ρ€ΡΠ·Π½ΠΎΠ΅» врСмя (врСмя с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС) Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (см. Ρ€ΠΈΡ. 4.1, 4.2, 4.4).

Β· ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ зависимости Ρ‚.ΠΊ. ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ всС Ρ‚ΠΎΡ‡ΠΊΠΈ изобраТСния ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ подмноТСство Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ зависит ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа Ρ‚ΠΎΡ‡Π΅ΠΊ.

графичСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

5. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π€Π°ΠΉΠ» main. cpp

#include «BMP.h» ;

#include «conio.h»

#include

#include

void main ()

{

setlocale (LC_ALL, «rus»);

// коррСктная Ρ€Π°Π±ΠΎΡ‚Π° с Ρ€ΡƒΡΡΠΊΠΈΠΌ тСкстом

BMP *IMG1, *IMG2;

long H, W;

char name[200];

int *r = new int, *g = new int, *b = new int, *w = new int, *h = new int;

int rz, gz, bz;

int x1, y1, x2, y2, x3, y3, x4, y4;

int val;

printf («1 — Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅n»);

printf («2 — ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅n Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:»);

scanf («%d», &val);

if (val == 1)

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния :»);

scanf («%d %d», &H, &W);

IMG1 = new BMP (H, W);

}

if (val == 2)

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π°, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ изобраТСния :»);

scanf («%s», name);

IMG1 = new BMP (name);

}

system («cls»); // очистка экрана

if (val == 1 || val == 2)

{

do

{

printf («1 — Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅n»);

printf («2 — Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅n»);

printf («3 — ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° изобраТСнияn»);

printf («4 — ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСнияn»);

printf («————————————————————-n»);

printf («5 — ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒn»);

printf («6 — ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ линиюn»);

printf («7 — ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒn»);

printf («8 — ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊn»);

printf («9 — ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊn»);

printf («10 — ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊn»);

printf («11 — ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈn»);

printf («————————————————————-n»);

printf («12 — ИзмСнСниС яркостиn»);

printf («13 — ИзмСнСниС контрастностиn»);

printf («14 — НалоТСниС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ изобраТСнияn»);

printf («15 — УмСньшСниС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способностиn»);

printf («16 — ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅n»);

printf («17 — Π—Π°Π»ΠΈΠ²ΠΊΠ°n»);

printf («18 — ИскаТСниС изобраТСния. Π­Ρ„Ρ„Π΅ΠΊΡ‚ Π»ΠΈΠ½Π·Ρ‹n»);

printf («————————————————————-n»);

printf («0 — Π’Ρ‹Ρ…ΠΎΠ΄n»);

printf («n==========================================n»);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ :»);

scanf («%d», &val);

switch (val)

{

case 1:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π°, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ изобраТСния :»);

scanf («%s», name);

if (IMG1->Load (name))printf («Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ»);

else printf («ΠΠ΅Ρ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚!»);

getch ();

};break;

case 2:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π°, сохраняСмого изобраТСния :»);

scanf («%s», name);

IMG1->Save (name);

};break;

case 3:

{

printf («Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° изобраТСния %d Π’», IMG1->FileSize ());

getch ();

}break;

case 4:

{

IMG1->Dimensions (w, h);

printf («Π Π°Π·ΠΌΠ΅Ρ€ изобраТСния %d x %d», *w, *h);

getch ();

};break;

case 5:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ: «);

scanf («%d %d», w, h);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ R G B:»);

scanf («%d %d %d», r, g, b);

IMG1->PutPixelRGB (*w, *h, *r, *g, *b);

};break;

case 6:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π°Ρ‡Π°Π»Π°: «);

scanf («%d %d», &x1, &y1);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠΎΠ½Ρ†Π°: «);

scanf («%d %d», &x2, &y2);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚: n0 — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉn1 — Π±Π΅Π»Ρ‹ΠΉn2 — синийn3 — Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉn4 — красныйn5 — ΠΏΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉn6 — ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉn7 — Ρ†ΠΈΠ°Π½ΠΎΠ²Ρ‹ΠΉn»);

scanf («%d», r);

IMG1->DrawLine (x1, y1, x2, y2, *r);

};break;

case 7:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° окруТности: «);

scanf («%d %d», &x1, &y1);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ радиус окруТности: «);

scanf («%d», r);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚: n0 — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉn1 — Π±Π΅Π»Ρ‹ΠΉn2 — синийn3 — Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉn4 — красныйn5 — ΠΏΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉn6 — ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉn7 — Ρ†ΠΈΠ°Π½ΠΎΠ²Ρ‹ΠΉn»);

scanf («%d», b);

IMG1->DrawCircle (x1, y1, *r, *b);

};break;

case 8:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹: «);

scanf («%d %d», &x1, &y1);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹: «);

scanf («%d %d», &x2, &y2);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹: «);

scanf («%d %d», &x3, &y3);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹: «);

scanf («%d %d», &x4, &y4);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚: n0 — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉn1 — Π±Π΅Π»Ρ‹ΠΉn2 — синийn3 — Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉn4 — красныйn5 — ΠΏΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉn6 — ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉn7 — Ρ†ΠΈΠ°Π½ΠΎΠ²Ρ‹ΠΉn»);

scanf («%d», r);

IMG1->DrawQuadrangle (x1, y1, x2, y2, x3, y3, x4, y4, *r);

};break;

case 9:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹: «);

scanf («%d %d», &x1, &y1);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹: «);

scanf («%d %d», &x2, &y2);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹: «);

scanf («%d %d», &x3, &y3);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚: n0 — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉn1 — Π±Π΅Π»Ρ‹ΠΉn2 — синийn3 — Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉn4 — красныйn5 — ΠΏΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉn6 — ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉn7 — Ρ†ΠΈΠ°Π½ΠΎΠ²Ρ‹ΠΉn»);

scanf («%d», r);

IMG1->DrawTriangle (x1, y1, x2, y2, x3, y3, *r);

};break;

case 10:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°: «);

scanf («%d %d», &x1, &y1);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°: «);

scanf («%d %d», &x2, &y2);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ R G B:(Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ -1,»);

printf («Ρ‚ΠΎ ΠΈΡΡ…одная ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ†Π²Π΅Ρ‚Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся)»);

scanf («%d %d %d», r, g, b);

IMG1->QuadrangleRGB (x1, y1, x2, y2, *r, *g, *b);

};break;

case 11:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ: «);

scanf («%d %d», &x1, &y1);

if (IMG1->GetPixel (x1, y1, r, g, b))printf («Π¦Π²Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (%d, %d) Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ R G B: %d %d %d», x1, y1, *r, *g, *b);

else printf («Π’ΠΎΡ‡ΠΊΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ Π½Π΅Ρ‚!»);

getch ();

};break;

case 12:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠ΅Ρ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ измСнСния яркости (-255 < k < 255):»);

scanf («%d», &x1);

IMG1->Bright (x1);

};break;

case 13:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠ΅Ρ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ измСнСния контрастности (-100 < k < 100):»);

scanf («%d», &x1);

IMG1->Contrast (x1);

};break;

case 14:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ :»);

scanf («%s», name);

IMG2 = new BMP (100, 100);

if (IMG2->Load (name))

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ «);

printf («ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ:»);

scanf («%d %d», &x1, &y1);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ, Ρƒ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ изобраТСния Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ R G B:»);

printf («Π•ΡΠ»ΠΈ ввСсти -1 -1 -1, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ пиксСли Ρ†Π²Π΅Ρ‚Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°,»);

printf («Π΅ΡΠ»ΠΈ -2 -2 -2, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ :»);

scanf («%d %d %d», r, g, b);

IMG1->Imposition (*IMG2, x1, y1, *r, *g, *b);

}

else printf («ΠΠ΅Ρ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚!»);

delete IMG2;

getch ();

};break;

case 15:

{

printf («Π£ΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности ΠΏΡƒΡ‚Π΅ΠΌn»);

printf («ΡƒΡΡ€Π΅Π΄Π½Π΅Π½ΠΈΡ Π³Ρ€ΡƒΠΏΠΏ пиксСлСй 3×3 Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°!»);

IMG1->Resolution ();

getch ();

};break;

case 16:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠ΅Ρ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: ΠΏΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ k < 0,»);

printf («ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° k > 0 (k — Ρ†Π΅Π»ΠΎΠ΅): «);

scanf («%d», &x1);

IMG1->Zoom (x1);

};break;

case 17:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉn»);

printf («ΠΎΠ±Π»Π°ΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ :»);

scanf («%d %d», w, h);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ R G B:»);

scanf («%d %d %d», &rz, &gz, &bz);

IMG1->FloodFill (*w, *h, rz, gz, bz);

};break;

case 18:

{

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° Π»ΠΈΠ½Π·Ρ‹: «);

scanf («%d %d», &x1, &y1);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ радиус Π»ΠΈΠ½Π·Ρ‹: «);

scanf («%d», r);

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ коэффициСнт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ:»);

scanf («%d», b);

IMG1->Lens (x1, y1, *r, *b);

};break;

}

system («cls»); // очистка экрана

}

while (val ≠ 0);

}

delete IMG1;}

Π€Π°ΠΉΠ» BMP. h:

#include

using namespace std;

typedef short WORD;

typedef unsigned DWORD;

typedef long LONG;

typedef unsigned char BYTE;

class BMP

{

// ДАННЫЕ О Π€ΠΠ™Π›Π•

WORD bfType; // Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°, символы «BM»

DWORD bfSize; // Ρ€Π°Π·ΠΌΠ΅Ρ€ всСго Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…

WORD bfReserved1;

WORD bfReserved2;

// Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΡƒΠ»ΠΈ

DWORD bfOffBits; // содСрТит смСщСниС Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΎΡ‚ //Π½Π°Ρ‡Π°Π»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π΄ΠΎ Π±ΠΈΡ‚ΠΎΠ² изобраТСния

// ДАННЫЕ О Π˜Π—ΠžΠ‘Π ΠΠ–Π•ΠΠ˜Π˜

DWORD biSize; // Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

LONG biWidth; // ΡˆΠΈΡ€ΠΈΠ½Π° изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…

LONG biHeight; // высота изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…

WORD biPlanes; // число плоскостСй, Ρ€Π°Π²Π½ΠΎ 1

WORD biBitCount;

// ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ количСство Π±ΠΈΡ‚ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡŒ.

DWORD biCompression;

// Ρ‚ΠΈΠΏ сТатия. Если Ρ€Π°Π½ΠΎ BI_RGB, Ρ‚ΠΎ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся

DWORD biSizeImage;

// 0 ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатого изобраТСния Π² Π±Π°ΠΉΡ‚Π°Ρ…

LONG biXPelsPerMet;

// Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, пиксСл/ΠΌ

LONG biYPelsPerMet;

// Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, пиксСл/ΠΌ

DWORD biClrUsed; // ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²

DWORD biClrImportant;// ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ «Π²Π°ΠΆΠ½Ρ‹Ρ…» Ρ†Π²Π΅Ρ‚ΠΎΠ²

// ИНЀОРМАЦИЯ О ΠŸΠ˜ΠšΠ‘Π•Π›Π―Π₯

BYTE **MBMP;

// массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΠΈ изобраТСния

void Col_To_RGB (int col, int* red, int* green, int* blue); // ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ†Π²Π΅Ρ‚Π°

public:

BMP (const BMP &M);

// конструктор копирования

BMP (char FileNames[]);

// конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ строкой (имя графичСского Ρ„ΠΉΠ»Π°)

BMP (long H, long W); // конструктор с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния

~BMP (); // дСструктор

BMP* Copy ();

// созданиС ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

int Load (char FileNames[]);

// Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ изобраТСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

void Save (char FileNames[]);

// запись изобраТСния Π² Ρ„Π°ΠΉΠ»Π°

unsigned FileSize (); // Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°

void Dimensions (int *W, int *H);// Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния

int PutPixel (int x, int y, int color);

// Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ пиксСль

int GetPixel (int x, int y, int *red, int *green, int *blue); // Π²Π·ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ пиксСля

int PutPixelRGB (int x, int y, int red, int green, int blue); // Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ пиксСль, задавая Ρ†Π²Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB

int DrawLine (int x1, int y1, int x2, int y2, int color); // Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ линию

int DrawQuadrangle (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int color);

// Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

int DrawTriangle (int x1, int y1, int x2, int y2, int x3, int y3, int color); // Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

int DrawCircle (int x0, int y0, int radius, int color); // Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ окруТности

void Bright (int x);

// ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ яркости -255 < x < 255

void Contrast (int e);

// ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ контрастности -100 < e < 100

void QuadrangleRGB (int x1, int y1, int x2, int y2, int rr, int gg, int bb); // ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

void Imposition (BMP &T, int x, int y, int r, int g, int b); // Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ Ρ†Π²Π΅Ρ‚Π° rgb

void Resolution (); // ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности

void Zoom (int k); // ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

void FloodFill (int x, int y, int rz, int gz, int bz); // Π·Π°Π»ΠΈΠ²ΠΊΠ°

void Lens (int x, int y, int r, int k); // эффСкт Π»ΠΈΠ½Π·Ρ‹

};

Π€Π°ΠΉΠ» BMP. cpp:

#include «BMP.h»

#include «math.h»

#include «queue.h»

BMP:BMP (const BMP &M) // конструктор копирования

{

bfType = M. bfType;

bfSize = M. bfSize;

bfReserved1 = M. bfReserved1;

bfReserved2 = M. bfReserved2;

bfOffBits = M. bfOffBits;

biSize = M. biSize;

biWidth = M. biWidth;

biHeight = M. biHeight;

biPlanes = M. biPlanes;

biBitCount = M. biBitCount;

biCompression = M. biCompression;

biSizeImage = M. biSizeImage;

biXPelsPerMet = M. biXPelsPerMet;

biYPelsPerMet = M. biYPelsPerMet;

biClrUsed = M. biClrUsed;

biClrImportant = M. biClrImportant;

int sz_line = biWidth * 3;

while (sz_line % 4 ≠ 0) sz_line++;

// Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Π‘Π›ΠžΠ’Π (ΠΊΡ€Π°Ρ‚Π½ΠΎ 4)

MBMP = new BYTE *[biHeight];

for (int i = 0; i < biHeight; i++)

{

MBMP[i] = new BYTE[sz_line];

for (int j = 0; j < sz_line; j++)MBMP[i][j] = M. MBMP[i][j];

}

}

BMP:BMP (char FileNames[])

// конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΊ строкой (имя графичСского Ρ„Π°ΠΉΠ»Π°)

{

bfType = 19 778;

bfSize = 0;

bfReserved1 = 0;

bfReserved2 = 0;

bfOffBits = 54;

biSize = 40;

biWidth = 0;

biHeight = 0;

biPlanes = 1;

biBitCount = 24;

biCompression = 0;

biSizeImage = 0;

biXPelsPerMet = 0;

biYPelsPerMet = 0;

biClrUsed = 0;

biClrImportant = 0;

MBMP = NULL;

Load (FileNames);

}

BMP:BMP (long H, long W)

// конструктор создания пустого (Π±Π΅Π»ΠΎΠ³ΠΎ) изобраТСния

{

bfType = 19 778;

bfSize = H * W * 3 + 54;

bfReserved1 = 0;

bfReserved2 = 0;

bfOffBits = 54;

biSize = 40;

biWidth = W;

biHeight = H;

biPlanes = 1;

biBitCount = 24;

biCompression = 0;

biSizeImage = H * W * 3;

biXPelsPerMet = 0;

biYPelsPerMet = 0;

biClrUsed = 0;

biClrImportant = 0;

int sz_line = biWidth * 3;

while (sz_line % 4 ≠ 0) sz_line++;

// Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Π‘Π›ΠžΠ’Π (ΠΊΡ€Π°Ρ‚Π½ΠΎ 4)

MBMP = new BYTE *[biHeight];

for (int i = 0; i < biHeight; i++)

{

MBMP[i] = new BYTE[sz_line];

for (int j = 0; j < sz_line; j++)MBMP[i][j] = 255;

}

}

BMP:~BMP ()

// дСструктор

{

for (int i = 0; i < biHeight; i++)

delete MBMP[i];

delete MBMP;

MBMP = NULL;

}

BMP* BMP: Copy ()// созданиС ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

{

return new BMP (*this);

}

int BMP: Load (char FileNames[])

// Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

{

// Π’Π Π•ΠœΠ•ΠΠΠ«Π• ДАННЫЕ О Π€ΠΠ™Π›Π•

WORD bfTypet;

DWORD bfSizet;

WORD bfReserved1t;

WORD bfReserved2t;

DWORD bfOffBitst;

// Π’Π Π•ΠœΠ•ΠΠΠ«Π• ДАННЫЕ О Π˜Π—ΠžΠ‘Π ΠΠ–Π•ΠΠ˜Π˜

DWORD biSizet;

LONG biWidtht;

LONG biHeightt;

WORD biPlanest;

WORD biBitCountt;

DWORD biCompressiont;

DWORD biSizeImaget;

LONG biXPelsPerMett;

LONG biYPelsPerMett;

DWORD biClrUsedt;

DWORD biClrImportantt;

fstream F;

F.open (FileNames, ios: in | ios: binary);

// Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ для чтСния

// Π§Π’Π•ΠΠ˜Π• ДАННЫΠ₯ О Π€ΠΠ™Π›Π•

F.read ((char*)&bfTypet, sizeof (WORD));

F.read ((char*)&bfSizet, sizeof (DWORD));

F.read ((char*)&bfReserved1t, sizeof (WORD));

F.read ((char*)&bfReserved2t, sizeof (WORD));

F.read ((char*)&bfOffBitst, sizeof (DWORD));

// Π§Π’Π•ΠΠ˜Π• ДАНННЫΠ₯ О Π˜Π—ΠžΠ‘Π ΠΠ–Π•ΠΠ˜Π˜

F.read ((char*)&biSizet, sizeof (DWORD));

F.read ((char*)&biWidtht, sizeof (LONG));

F.read ((char*)&biHeightt, sizeof (LONG));

F.read ((char*)&biPlanest, sizeof (WORD));

F.read ((char*)&biBitCountt, sizeof (WORD));

F.read ((char*)&biCompressiont, sizeof (DWORD));

F.read ((char*)&biSizeImaget, sizeof (DWORD));

F.read ((char*)&biXPelsPerMett, sizeof (LONG));

F.read ((char*)&biYPelsPerMett, sizeof (LONG));

F.read ((char*)&biClrUsedt, sizeof (DWORD));

F.read ((char*)&biClrImportantt, sizeof (DWORD));

if (biBitCountt == 24)

{

this->~BMP (); // ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

// Π—ΠΠŸΠ˜Π‘Π¬ ΠΠžΠ’Π«Π₯ Π—ΠΠΠ§Π•ΠΠ˜Π™

bfType = bfTypet;

bfSize = bfSizet;

bfReserved1 = bfReserved1t;

bfReserved2 = bfReserved2t;

bfOffBits = bfOffBitst;

biSize = biSizet;

biWidth = biWidtht;

biHeight = biHeightt;

biPlanes = biPlanest;

biBitCount = biBitCountt;

biCompression = biCompressiont;

biSizeImage = biSizeImaget;

biXPelsPerMet = biXPelsPerMett;

biYPelsPerMet = biYPelsPerMett;

biClrUsed = biClrUsedt;

biClrImportant = biClrImportantt;

// Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…

int sz_line = biWidth * 3;

while (sz_line % 4 ≠ 0) sz_line++;

// Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Π‘Π›ΠžΠ’Π (ΠΊΡ€Π°Ρ‚Π½ΠΎ 4)

MBMP = new BYTE *[biHeight];

for (int i = 0; i < biHeight; i++)

{

MBMP[i] = new BYTE[sz_line];

F.read ((char*)MBMP[i], sz_line);

}

F.close ();

return 1;

}

F.close ();

return 0;

}

void BMP: Save (char FileNames[])

// сохранСниС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»

{

fstream F;

F.open (FileNames, ios: out | ios: binary);

// Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ для записи

// Π—ΠΠŸΠ˜Π‘Π¬ ДАННЫΠ₯ О Π€ΠΠ™Π›Π•

F.write ((char*)&bfType, sizeof (WORD));

F.write ((char*)&bfSize, sizeof (DWORD));

F.write ((char*)&bfReserved1,sizeof (WORD));

F.write ((char*)&bfReserved2,sizeof (WORD));

F.write ((char*)&bfOffBits, sizeof (DWORD));

// Π—ΠΠŸΠ˜Π‘Π¬ ДАНННЫΠ₯ О Π˜Π—ΠžΠ‘Π ΠΠ–Π•ΠΠ˜Π˜

F.write ((char*)&biSize, sizeof (DWORD));

F.write ((char*)&biWidth, sizeof (LONG));

F.write ((char*)&biHeight, sizeof (LONG));

F.write ((char*)&biPlanes, sizeof (WORD));

F.write ((char*)&biBitCount, sizeof (WORD));

F.write ((char*)&biCompression, sizeof (DWORD));

F.write ((char*)&biSizeImage, sizeof (DWORD));

F.write ((char*)&biXPelsPerMet, sizeof (LONG));

F.write ((char*)&biYPelsPerMet, sizeof (LONG));

F.write ((char*)&biClrUsed, sizeof (DWORD));

F.write ((char*)&biClrImportant, sizeof (DWORD));

// запись Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…

int sz_line = biWidth * 3;

while (sz_line % 4 ≠ 0) sz_line++;

// Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Π‘Π›ΠžΠ’Π (ΠΊΡ€Π°Ρ‚Π½ΠΎ 4)

for (int i = 0; i < biHeight; i++)

{

F.write ((char*)MBMP[i], sz_line);

}

F.close ();

}

unsigned BMP: FileSize ()// Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°

{

return bfSize;

}

void BMP: Dimensions (int *W, int *H)// Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния

{

*W = biWidth;

*H = biHeight;

}

void BMP: Col_To_RGB (int col, int* red, int* green, int* blue) // ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ†Π²Π΅Ρ‚Π°

{

switch (col)

{

case 0: {*red = 0; *green = 0; *blue = 0;}break;

// Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ

case 1: {*red = 255; *green = 255; *blue = 255;}break;

// Π±Π΅Π»Ρ‹ΠΉ

case 2: {*red = 0; *green = 0; *blue = 255;}break; // синий

case 3: {*red = 0; *green = 255; *blue = 0;}break; // Π·Π΅Π»Π΅Π½Ρ‹ΠΉ

case 4: {*red = 255; *green = 0; *blue = 0;}break; // красный

case 5: {*red = 255; *green = 0; *blue = 255;}break; // ΠΏΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ

case 6: {*red = 255; *green = 255; *blue = 0;}break; // ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ

case 7: {*red = 0; *green = 255; *blue = 255;}break; // Ρ†ΠΈΠ°Π½ΠΎΠ²Ρ‹ΠΉ

default :{*red = 255; *green = 255; *blue = 255;};

}

}

int BMP: PutPixel (int x, int y, int color) // Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ пиксСль

{

if (x < biWidth && y < biHeight)

{

int *r = new int, *g = new int, *b = new int;

Col_To_RGB (color, r, g, b);

MBMP[biHeight — y — 1][x*3] = *b;

MBMP[biHeight — y — 1][x*3 + 1] = *g;

MBMP[biHeight — y — 1][x*3 + 2] = *r;

return 1;

}

return 0;

}

int BMP: GetPixel (int x, int y, int *red, int *green, int *blue) // Π²Π·ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ пиксСля

{

if (x <= biWidth && y <= biHeight && x >= 0 && y >= 0)

{

*blue = MBMP[biHeight — y — 1][x*3];

*green = MBMP[biHeight — y — 1][x*3 + 1];

*red = MBMP[biHeight — y — 1][x*3 + 2];

return 1;

}

return 0;

}

int BMP: PutPixelRGB (int x, int y, int red, int green, int blue) // Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ пиксСль задавая Ρ†Π²Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB

{

if (x < biWidth && y < biHeight && x >= 0 && y >= 0)

{

MBMP[biHeight — y — 1][x*3] = blue;

MBMP[biHeight — y — 1][x*3 + 1] = green;

MBMP[biHeight — y — 1][x*3 + 2] = red;

return 1;

}

return 0;

}

int BMP: DrawLine (int x1, int y1, int x2, int y2, int color) // Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ линию

{

if (x1 <= biWidth && x1 >= 0 && y1 <= biHeight && y1 >= 0 && x2 <= biWidth && x2 >= 0 && y2 <= biHeight && y2 >= 0)

{

int deltaX = abs (x2 — x1);

int deltaY = abs (y2 — y1);

int signX = x1 < x2? 1: -1;

int signY = y1 < y2? 1: -1;

int error = deltaX — deltaY;

while (1)

{

PutPixel (x1, y1, color);

if (x1 == x2 && y1 == y2)

return 1;

int error2 = error * 2;

if (error2 > -deltaY)

{

error -= deltaY;

x1 += signX;

}

if (error2 < deltaX)

{

error += deltaX;

y1 += signY;

}

}

}

return 0;

}

int BMP: DrawQuadrangle (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int color) // Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

{

if (x1<=biWidth && x1>=0 && y1<=biHeight && y1>=0 && x2<=biWidth && x2>=0 && y2<=biHeight && y2>=0 && x3<=biWidth && x3>=0 && y3<=biHeight && y3>=0 && x4<=biWidth && x4>=0 && y4<=biHeight && y4>=0)

{

DrawLine (x1, y1, x2, y2, color);

DrawLine (x2, y2, x3, y3, color);

DrawLine (x3, y3, x4, y4, color);

DrawLine (x4, y4, x1, y1, color);

return 1;

}

return 0;

}

int BMP: DrawTriangle (int x1, int y1, int x2, int y2, int x3, int y3, int color) // Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

{

if (x1<=biWidth && x1>=0 && y1<=biHeight && y1>=0 && x2<=biWidth && x2>=0 && y2<=biHeight && y2>=0 && x3<=biWidth && x3>=0 && y3<=biHeight && y3>=0)

{

DrawLine (x1, y1, x2, y2, color);

DrawLine (x2, y2, x3, y3, color);

DrawLine (x3, y3, x1, y1, color);

return 1;

}

return 0;

}

int BMP: DrawCircle (int x0, int y0, int radius, int color) // рисованиС окруТности

{

if (x0 < biWidth && y0 < biHeight)

{

int x = 0;

int y = radius;

int delta = 2 — 2 * radius;

int error = 0;

while (y >= 0)

{

PutPixel (x0 + x, y0 + y, color);

PutPixel (x0 + x, y0 — y, color);

PutPixel (x0 — x, y0 + y, color);

PutPixel (x0 — x, y0 — y, color);

error = 2 * (delta + y) — 1;

if (delta < 0 && error <= 0)

{

++x;

delta += 2 * x + 1;

continue;

}

error = 2 * (delta — x) — 1;

if (delta > 0 && error > 0)

{

—y;

delta += 1 — 2 * y;

continue;

}

++x;

delta += 2 * (x — y);

—y;

}

return 1;

}

return 0;

}

void BMP: Bright (int x) // ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ яркости

{

for (int i = 0; i < biHeight; i++)

for (int j = 0; j < biWidth*3; j++)

{

if (MBMP[i][j] - x > 255) MBMP[i][j] = 255;

else if (MBMP[i][j] - x < 0) MBMP[i][j] = 0;

else MBMP[i][j] = MBMP[i][j] - x;

}

}

void BMP: Contrast (int e) // ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ контрастности

{

float Y0 = 0; // срСдняя ΡΡ€ΠΊΠΎΡΡ‚ΡŒ

float k = 1 + e*0.01; // коэффициСнт

// вычисляСтся срСдняя ΡΡ€ΠΊΠΎΡΡ‚ΡŒ

for (int i = 0; i < biHeight; i++)

for (int j = 0; j < biWidth*3; j = j + 3)

Y0 += MBMP[i][j] * 0.114 + MBMP[i][j + 1] * 0.587 + MBMP[i][j + 2] * 0.299;

Y0 = Y0/(biWidth*biHeight);

// ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² пиксСлСй

for (int i = 0; i < biHeight; i++)

for (int j = 0; j < biWidth*3; j++)

if (Y0 + k * (MBMP[i][j] - Y0) > 255) MBMP[i][j] = 255;

else if (Y0 + k * (MBMP[i][j] - Y0) < 0) MBMP[i][j] = 0;

else MBMP[i][j] = Y0 + floor (k * (MBMP[i][j] - Y0));

}

void BMP: QuadrangleRGB (int x1, int y1, int x2, int y2, int rr, int gg, int bb) // ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

{

if (x1>biWidth || x1<0 || y1>biHeight || y1<0 || x2>biWidth || x2<0 || y2>biHeight || y2<0)return;

if (rr > 255) rr = 255;

if (gg > 255) gg = 255;

if (bb > 255) bb = 255;

int *r = new int, *g = new int, *b = new int;

for (int i = y1; i < y2; i++)

for (int j = x1; j < x2; j++)

{

GetPixel (j, i, r, g, b);

if (rr > -1)*r = rr;

if (gg > -1)*g = gg;

if (bb > -1)*b = bb;

PutPixelRGB (j, i, *r, *g, *b);

}

}

void BMP: Imposition (BMP &T, int x, int y, int r, int g, int b) // Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ Ρ†Π²Π΅Ρ‚Π° rgb

{

int *rr = new int, *gg = new int, *bb = new int, *w = new int, *h = new int;

T.Dimensions (w, h);

// ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ изобраТСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°

if (r == -1 && g == -1 && b == -1)

// ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ пиксСли Ρ†Π²Π΅Ρ‚Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°

{

T.GetPixel (0, 0, rr, gg, bb);

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ†Π²Π΅Ρ‚ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π°

r = *rr; g = *gg; b = *bb;

}

for (int i = y; i < *h + y && i < biHeight; i++)

// ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС пиксСли Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ изобраТСния

for (int j = x; j < *w + x && j < biWidth; j++)

}

void BMP: Resolution ()

// ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности

{

// вСсовая маска

int maska[3][3] = {{1,1,1},{1,1,1},{1,1,1}};

int *r = new int, *g = new int, *b = new int;

int sr, sg, sb;

BMP TMP (*this);// созданиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ изобраТСния

for (int i = 0; i < TMP. biHeight; i++)

// ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх пиксСлСй изобраТСния

for (int j = 0; j < TMP. biWidth; j++)

{

sr = 0; sg = 0; sb = 0;

// ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ суммы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ² пиксСлСй

for (int k1 = -1; k1 <= 1; k1++)

// подсчитываниС для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

for (int k2 = -1; k2 <= 1; k2++)

if (j+k2 < biWidth && i+k1 < biHeight && i+k1 >= 0 && j+k2 >= 0)

{

TMP.GetPixel (j + k2, i + k1, r, g, b);

*r = *r * maska[1 + k1][1 + k2];

*g = *g * maska[1 + k1][1 + k2];

*b = *b * maska[1 + k1][1 + k2];

sr+= *r; sg+= *g; sb+= *b;

}

// вычислСниС срСдних Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ°Π½Π°Π»ΠΎΠ² Ρ†Π²Π΅Ρ‚Π°

sr = sr/9;

sg = sg/9;

sb = sb/9;

if (sr > 255) sr = 255;

if (sg > 255) sg = 255;

if (sb > 255) sb = 255;

PutPixelRGB (j, i, sr, sg, sb);

// ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

}

}

void BMP: Zoom (int k) // ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

{

int *r = new int, *g = new int, *b = new int, end;

if (k > 1)

{

BMP TMP (*this);// созданиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ изобраТСния

this->~BMP ();

// Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

biWidth = biWidth * k;

biHeight = biHeight * k;

bfSize = biHeight * biWidth * 3 + 54;

biSizeImage = biHeight * biWidth * 3;

int sz_line = biWidth * 3;

while (sz_line % 4 ≠ 0) sz_line++;

// Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Π‘Π›ΠžΠ’Π (ΠΊΡ€Π°Ρ‚Π½ΠΎ 4)

MBMP = new BYTE *[biHeight];

for (int i = 0; i < biHeight; i++)

{

MBMP[i] = new BYTE[sz_line];

for (int j = 0; j < sz_line; j++)MBMP[i][j] = 255;

}

// ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх пиксСлСй изобраТСния

for (int i = 0; i < TMP. biHeight; i++)

for (int j = 0; j < TMP. biWidth; j++)

{

TMP.GetPixel (j, i, r, g, b);

for (int k1 = 0; k1 < k; k1++)

for (int k2 = 0; k2 < k; k2++)

PutPixelRGB (j*k + k1, i*k + k2, *r, *g, *b);

}

return;

}

if (k < 0)

{

BMP TMP (*this);// созданиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ изобраТСния

this->~BMP ();

// Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

biWidth = biWidth / -k;

biHeight = biHeight / -k;

bfSize = biHeight * biWidth * 3 + 54;

biSizeImage = biHeight * biWidth * 3;

int sz_line = biWidth * 3;

while (sz_line % 4 ≠ 0) sz_line++;

// Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Π‘Π›ΠžΠ’Π (ΠΊΡ€Π°Ρ‚Π½ΠΎ 4)

MBMP = new BYTE *[biHeight];

for (int i = 0; i < biHeight; i++)

{

MBMP[i] = new BYTE[sz_line];

for (int j = 0; j < sz_line; j++)MBMP[i][j] = 255;

}

// ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх пиксСлСй изобраТСния

int sr, sg, sb;

for (int i = 0; i < biHeight; i++)

for (int j = 0; j < biWidth; j++)

{

if (-k % 2 == 0) end = -k/2;

else end = -k/2 + 1;

sr = 0; sg = 0; sb = 0;

// ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ суммы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ² пиксСлСй

for (int k1 = k/2; k1 < end; k1++)

for (int k2 = k/2; k2 < end; k2++)

if (-j*k+k2 < TMP. biWidth && -i*k+k1 < TMP. biHeight && -i*k+k1 >= 0 && -j*k+k2 >= 0)

{

TMP.GetPixel (-j*k + k2, -i*k + k1, r, g, b);

sr+= *r; sg+= *g; sb+= *b;

}

sr = sr/(k*k);

sg = sg/(k*k);

sb = sb/(k*k);

if (sr > 255) sr = 255;

if (sg > 255) sg = 255;

if (sb > 255) sb = 255;

PutPixelRGB (j, i, sr, sg, sb);

// ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

}

return;

}

}

void BMP: FloodFill (int x, int y, int rz, int gz, int bz) // Π·Π°Π»ΠΈΠ²ΠΊΠ°

{

QUEUE Q;

int *rn = new int, *gn = new int, *bn = new int;

GetPixel (x, y, rn, gn, bn);// замСняСмый Ρ†Π²Π΅Ρ‚

int *xx = new int, *yy = new int, *r = new int, *g = new int, *b = new int;

Q.Push (x, y); // ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ

PutPixelRGB (x, y, rz, gz, bz);

while (Q.Size () ≠ 0)

{

Q.Pop (xx, yy);// ΠΈΠ·ΡŠΡΡ‚ΡŒ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

// пиксСль слСва

if (GetPixel (*xx — 1, *yy, r, g, b))// Ссли этот //Ρ†Π²Π΅Ρ‚ замСняСмый, Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ

if (*r == *rn && *g == *gn && *b == *bn)

{

PutPixelRGB (*xx — 1, *yy, rz, gz, bz);

Q.Push (*xx — 1, *yy);

}

// пиксСль справа

if (GetPixel (*xx + 1, *yy, r, g, b))// Ссли этот //Ρ†Π²Π΅Ρ‚ замСняСмый, Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ

if (*r == *rn && *g == *gn && *b == *bn)

{

PutPixelRGB (*xx + 1, *yy, rz, gz, bz);

Q.Push (*xx + 1, *yy);

}

// пиксСль свСрху

if (GetPixel (*xx, *yy — 1, r, g, b))// Ссли этот //Ρ†Π²Π΅Ρ‚ замСняСмый, Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ

if (*r == *rn && *g == *gn && *b == *bn)

{

PutPixelRGB (*xx, *yy — 1, rz, gz, bz);

Q.Push (*xx, *yy — 1);

}

// пиксСль снизу

if (GetPixel (*xx, *yy + 1, r, g, b))// Ссли этот //Ρ†Π²Π΅Ρ‚ замСняСмый, Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π²Π΅Ρ‚ Π·Π°Π»ΠΈΠ²ΠΊΠΈ

if (*r == *rn && *g == *gn && *b == *bn)

{

PutPixelRGB (*xx, *yy + 1, rz, gz, bz);

Q.Push (*xx, *yy + 1);

}

}

}

void BMP: Lens (int x, int y, int ro, int k) // эффСкт Π»ΠΈΠ½Π·Ρ‹

{

BMP TMP (*this); // Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

int *r = new int, *g = new int, *b = new int;

int xx, yy, i;

for (i = -ro; i <= ro; i++)// ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΊΡ€ΡƒΠ³Π°

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