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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² БИ

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ управлСния Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π² Borland C Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Π²Π°ΠΆΠ½Ρ‹ΠΉ элСмСнт — структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Π³Ρ€Π°Ρ„ичСских Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Π½Π° Π²ΡΠ΅Ρ… дисплСйных Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°Ρ…, ΠΊΡ€ΠΎΠΌΠ΅ VGA ΠΈ IBM8514, ΠΎΠ½Π° содСрТит ΠΊΠΎΠ΄Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°. Роль Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ VGA нСсколько иная ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна Π½ΠΈΠΆΠ΅. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ IMB8514 Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² БИ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΠ°Ρ„Π΅Π΄Ρ€Π°: Автоматика ΠΈ Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π• Π’ Π‘И Π ΠΠ‘ΠžΠ’Π Π’ Π“Π ΠΠ€Π˜Π§Π•Π‘КОМ Π Π•Π–Π˜ΠœΠ•

1. ΠžΠ‘Π—ΠžΠ  Π“Π ΠΠ€Π˜Π§Π•Π‘ΠšΠ˜Π₯ Π€Π£ΠΠšΠ¦Π˜Π™3

1.1. ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

1.2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°

1.3. Π Π°Π±ΠΎΡ‚Π° с Ρ€Π°ΡΡ‚Ρ€ΠΎΠΌ Ρ‚ΠΎΡ‡Π΅ΠΊ

1.4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠΌ

1.5. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа ΠΊ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ

1.6. ГрафичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹

1.7. Π’Ρ‹Π²ΠΎΠ΄ графичСского тСкста

2. ΠŸΠ Π˜Π•ΠœΠ« ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π― Π“Π ΠΠ€Π˜Π§Π•Π‘ΠšΠžΠ“Πž Π Π•Π–Π˜ΠœΠ

2.1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ графичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

2.2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ графичСского Ρ€Π΅ΠΆΠΈΠΌΠ°

2.3. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ»

2.4. РисованиС гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€

2.5. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ большиС ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

2.6. Π’Ρ‹Π²ΠΎΠ΄ числовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

2.7. Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° экрана

2.8. РСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ клавиши

2.9. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π²Π²ΠΎΠ΄Π° числовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

2.10.ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Ρ‹Ρ…ΠΎΠ΄Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ΠžΠ”Π—

2.11.ГрафичСская ΠΈ ΠΌΠ°Ρ‚СматичСская систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

2.12.ИспользованиС Π΄Π²ΡƒΡ… видСостраниц

2.13.РисованиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² bmp-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

2.14.Π Π°Π±ΠΎΡ‚Π° с ΠΌΡ‹ΡˆΡŒΡŽ

3. Π—ΠΠ”ΠΠΠ˜Π― Π”Π›Π― Π›ΠΠ‘ΠžΠ ΠΠ’ΠžΠ ΠΠžΠ™ Π ΠΠ‘ΠžΠ’Π«

3.1. Π—Π²Π΅Π·Π΄Π½ΠΎΠ΅ Π½Π΅Π±ΠΎ

3.2. Π‘Π½Π΅Π³ΠΎΠΏΠ°Π΄

3.3. РисованиС Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

3.4. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π²Π΅Π·Π΄Ρ‹ Π‘Π˜Π‘Π›Π˜ΠžΠ“Π ΠΠ€Π˜Π§Π•Π‘ΠšΠ˜Π™ БПИБОК

1. ΠžΠ‘Π—ΠžΠ  Π“Π ΠΠ€Π˜Π§Π•Π‘ΠšΠ˜Π₯ Π€Π£ΠΠšΠ¦Π˜Π™

1.1. ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

ГрафичСский Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² являСтся Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ тСкстовый Ρ€Π΅ΠΆΠΈΠΌ. Π‘Π΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ прилоТСния, написанныС ΠΏΠΎΠ΄ DOS, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ.

Π’ ΡΠ°ΠΌΡ‹Ρ… ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΡΠΏΠ»Π΅Π΅ΠΌ ΠŸΠš Π² Π³Ρ€Π°Ρ„ичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСна ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π­ΠΊΡ€Π°Π½ дисплСйного ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° прСдставляСтся ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ — пиксСлСй (pixels, ΠΎΡ‚ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ picture elements), ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ растр. Число пиксСлСй опрСдСляСт Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅) графичСской систСмы ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ отраТаСтся ΠΏΠ°Ρ€ΠΎΠΉ чисСл, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ количСство пиксСлСй Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ — число строк. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ пиксСлю экрана ставится Π² ΡΠΎΠΎΡ‚вСтствиС фиксированноС количСство Π±ΠΈΡ‚ΠΎΠ² (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ пиксСля) Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ области адрСсного пространства Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ микропроцСссора ΠŸΠš. Π­Ρ‚Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, называСмая Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ дисплСйного Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° (Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°) — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°. Π’ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€, Π² Ρ‡Π°ΡΡ‚ности, осущСствляСт цикличСскоС воспроизвСдСниС содСрТимого видСопамяти Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля опрСдСляСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ — bit-mapped graphics. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉΡΡ Π½Π° ΠŸΠš Π² Π³Ρ€Π°Ρ„ичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅, доступны для чтСния ΠΈ Π·Π°ΠΏΠΈΡΠΈ всС пиксСли видСопамяти.

Π’ Ρ€ΡΠ΄Π΅ случаСв Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ сущСствованиС Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ областСй ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ структуры, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ всСх пиксСлСй экрана. Π’Π°ΠΊΠΈΠ΅ области Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ страницами. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ любая ΠΈΠ· ΡΡ‚Ρ€Π°Π½ΠΈΡ† ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Π΅, занимая ΠΏΡ€ΠΈ этом вСсь экран. НаличиС страниц позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ быстро ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡ€Π°Π½Π΅, просто ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡΡΡŒ с ΠΎΠ΄Π½ΠΎΠΉ страницы Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π’ Ρ‡Π°ΡΡ‚ности, это Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ всю «Ρ‡Π΅Ρ€Π½ΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ» ΠΏΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ графичСского изобраТСния Π½Π° Π½Π΅ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ Π² Π½Π°ΡΡ‚оящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ страницС, избСгая появлСния Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… графичСских эффСктов.

ГрафичСскоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π΅ Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… дСйствий:

Β· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ пиксСлСй изобраТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DOS ΠΈΠ»ΠΈ BIOS, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΈ ΠΏΡ€ΡΠΌΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π° с Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ;

Β· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ схСма Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° обСспСчиваСт пСриодичСскоС считываниС видСопамяти ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² пиксСлСй Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сигналов, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ.

Π’ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ дисплСйных Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² (CGA, EGA, VGA ΠΈ Π΄Ρ€.), Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… (тСкстовых ΠΈ Π³Ρ€Π°Ρ„ичСских), Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ (video modes). ГрафичСскиС Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ, количСством Ρ†Π²Π΅Ρ‚ΠΎΠ², количСством страниц видСопамяти ΠΈ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΈΡ… Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΠΈ. Установкой графичСского Ρ€Π΅ΠΆΠΈΠΌΠ° управляСт ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ BIOS с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 10h.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ объСм страницы видСопамяти ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, Ρ‚ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΡ‚ΠΎΠ², приходящиСся Π½Π° ΠΎΠ΄ΠΈΠ½ пиксСль, находится Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ зависимости ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ количСства пиксСлСй Π½Π° ΡΠΊΡ€Π°Π½Π΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ пиксСля состоит ΠΈΠ· 1, 2, 4 ΠΈΠ»ΠΈ 8 Π±ΠΈΡ‚, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π³Ρ€Π°Ρ„ичСского Ρ€Π΅ΠΆΠΈΠΌΠ°. ВсС пиксСли, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Если Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ отводится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚, Ρ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²ΡƒΡ…Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»ΠΎΠΉ (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°). Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль Π² Π³Ρ€Π°Ρ„ичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ прСдставляСтся n Π±ΠΈΡ‚Π°ΠΌΠΈ, Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΡΠΊΡ€Π°Π½Π΅ N_pallette=2n ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΎΠ² Ρ†Π²Π΅Ρ‚Π° (ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° Ρ€Π΅ΠΆΠΈΠΌΠ°). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… графичСских систСмах принято Π² ΡΡ‚ΠΎΠΌ случаС Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ n ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚Π΅ΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ² (color planes).

Π’ Π΄ΠΈΡΠΏΠ»Π΅ΠΉΠ½Ρ‹Ρ… Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°Ρ… с ΠΌΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° управляСт ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСктронного Π»ΡƒΡ‡Π°, Ρ‚. Π΅. ΡΡ€ΠΊΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΡΠΊΡ€Π°Π½Π΅, Π° Ρ Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ — ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Ρ€Π΅Ρ… Π»ΡƒΡ‡Π΅ΠΉ, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ изобраТСния пиксСля. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Π½Π° RGB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ — ΠΊΡ€Π°ΡΠ½ΡƒΡŽ, Π·Π΅Π»Π΅Π½ΡƒΡŽ ΠΈ ΡΠΈΠ½ΡŽΡŽ. Если каТдая ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ N Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΉ, Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ число Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΎΠ² для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° составляСт N_colors=N3, ΠΏΡ€ΠΈ этом Π² Ρ‡ΠΈΡΠ»ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΎΠ² Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ, Π±Π΅Π»Ρ‹ΠΉ ΠΈ Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ сСрого.

Π¦Π²Π΅Ρ‚Π½ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ схСму, которая осущСствляСт Π²ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ ΠΊΠ°Π΄Ρ€Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Π² ΡΠΈΠ³Π½Π°Π»Ρ‹ управлСния ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ элСктронных Π»ΡƒΡ‡Π΅ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π° RGB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π Π°Π±ΠΎΡ‚Ρƒ схСмы ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²Ρ…ΠΎΠ΄Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится описаниС Ρ†Π²Π΅Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π° ΡΠΊΡ€Π°Π½ всСх пиксСлСй, значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½Ρ‹ Π½ΠΎΠΌΠ΅Ρ€Ρƒ этого Π²Ρ…ΠΎΠ΄Π°. Вакая схСма называСтся ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ². Если ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ пиксСля Π² Π³Ρ€Π°Ρ„ичСских Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹ΠΌ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ, прСдставляСтся m Π±ΠΈΡ‚Π°ΠΌΠΈ, Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° содСрТит N_table=2m строк (Π²Ρ…ΠΎΠ΄ΠΎΠ²). ВсС Ρ‚Ρ€ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² ΠΊΠ°Ρ€Ρ‚Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² прСдставлСны, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ числами ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ разрядности. Бпособ кодирования Ρ†Π²Π΅Ρ‚Π° зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ пиксСлСй Π½Π° ΡΠΊΡ€Π°Π½Π΅ дисплСя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² пиксСлСй Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ. Для этого Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния RGB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΏΠΎ Π²Ρ…ΠΎΠ΄Ρƒ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ, Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. ИзмСнСния ΠΊΠ°Ρ€Ρ‚Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ†Π²Π΅Ρ‚Π° пиксСлСй.

1.2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°

ГрафичСская систСма состоит ΠΈΠ· ΡΠ΄Ρ€Π° ΠΈ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ графичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ graphics. lib (Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ модуля). ΠŸΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΊ Π³Ρ€Π°Ρ„ичСским функциям, Π² Ρ‚Скст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», содСрТащий ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, константы, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ пСрСчислимыС Ρ‚ΠΈΠΏΡ‹:

#include

ГрафичСский интСрфСйс Ρ„ΠΈΡ€ΠΌΡ‹ Borland International (BGI — Borland Graphics Interface) состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚: постоянного ядра графичСской систСмы ΠΈ Π½Π°Π±ΠΎΡ€Π° графичСских Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ². Π―Π΄Ρ€ΠΎ графичСской систСмы воспринимаСт всС запросы ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ графичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Оно Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ дисплСйного Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°. Аппаратно-зависимой Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ графичСскиС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠ΅ интСрфСйс ΠΌΠ΅ΠΆΠ΄Ρƒ ядром систСмы ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ дисплСйным Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ.

ГрафичСскиС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ содСрТатся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .bgi. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· (binary image) Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π»ΠΈΠ·ΠΊΠΈΡ… ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ². Для использования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ постоянный Π½ΠΎΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ соотвСтствуСт макроподстановка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, EGA ΠΈΠ»ΠΈ VGA.

ГрафичСскиС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ (Π½ΠΎ Π½Π΅ Π²ΡΠ΅) графичСскиС Ρ€Π΅ΠΆΠΈΠΌΡ‹ дисплСйных Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ², прСдусмотрСнныС систСмой BIOS. Для указания Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… графичСских Ρ€Π΅ΠΆΠΈΠΌΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², прСдусмотрСны макроподстановки (EGALO, EGAHI, VGAHI ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅).

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π³Ρ€Π°Ρ„ичСским функциям, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ графичСский Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ дисплСйному Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρƒ, ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ ΡΠ΄Ρ€Ρƒ графичСской систСмы. ГрафичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ detectgraph, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для тСстирования Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Π°Π²Ρ‚оматичСского Π²Ρ‹Π±ΠΎΡ€Π° подходящСго Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ Π³Ρ€Π°Ρ„ичСского Ρ€Π΅ΠΆΠΈΠΌΠ°. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ;

void far detectgraph (int far *graph_driver, int far *graph_mode);

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

Если ΠΏΡ€ΠΈ тСстировании Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ дисплСйного Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ, Ρ‚ΠΎ Ρ„ункция graphresult Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -2. Ѐункция graphresult Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, содСрТащСй ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ графичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π•Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ

int far graphresult (void);

ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, установлСнноС ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ графичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, хранится Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ graphresult, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΎ обнуляСтся.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ описаниС любого ΠΈΠ· Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ графичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для Ρ‡Π΅Π³ΠΎ сущСствуСт функция grapherrormsg. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ;

char far *grapherrormsg (int error_code);

Если этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ graphresult, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС ΠΎ ΠΊΠΎΠ΄Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ послСднСй графичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ГрафичСский Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ графичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ способом Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ являСтся Π΅Π³ΠΎ автоматичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ initgraph с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ

void initgraph (int far *graph_driver, int far *graph_mode, char far *path_to_bgi);

АргумСнтами Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, содСрТащиС Π½ΠΎΠΌΠ΅Ρ€ графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Π½ΠΎΠΌΠ΅Ρ€ графичСского Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ BGI-Ρ„Π°ΠΉΠ»Ρƒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Ѐункция initgraph ΠΈΡ‰Π΅Ρ‚ Π½Π° Π΄ΠΈΡΠΊΠ΅ BGI-Ρ„Π°ΠΉΠ», содСрТащий Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈ Π²Ρ‹Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅Ρ‚ ядро систСмы Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΡΡ‚ΠΈΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. Если инициализация ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, функция graphresult Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ GR_Ok, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС — ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π΅ graphics.h.

Ѐункция

void far closegraph (void)

ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ графичСской систСмы. Она освобоТдаСт всю ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎ Π·Π°ΠΏΡ€ΠΎΡΠ°ΠΌ графичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ тСкстовый Ρ€Π΅ΠΆΠΈΠΌ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ графичСской систСмы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ автоматичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

систСмы:

int main (void)

{

int gd, gm, err;

detectgraph (&gd,&gm); /* ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° */

err=graphresult (); /* ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ */

if (err) { printf («n%s», grapherrormsg (err)); return 1; }

initgraph (&gd,&gm,"c:\borlandc\bgi"); /* инициализация систСмы */

err=graphresult (); /* ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ */

if (err) { printf («n%s», grapherrormsg (err)); return 2; }

/* …Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹…*/

closegraph (); /* Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы */

return 0;

}

МоТно Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° тСстированиСм Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, Π° Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡŽ, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΈ этом ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ соотвСтствиС Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ Π² Ρ€Π°ΡΠΏΠΎΡ€ΡΠΆΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом:

int main (void)

{

int gd=VGA, gm=VGAHI, err;

initgraph (&gd,&gm,"c:\borlandc\bgi");

err=graphresult ();

if (err)

{

printf («n%s», grapherrormsg (err));

return 1;

}

/* …Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹…*/

closegraph ();

return 0;

}

Π“Π»Π°Π²Π½Ρ‹ΠΌ нСдостатком автоматичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ initgraph являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° обращаСтся ΠΊ Π΄ΠΈΡΠΊΡƒ для чтСния BGI-Ρ„Π°ΠΉΠ»Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ автоматичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° являСтся Π΅Π³ΠΎ статичСскоС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΡΡ‚Π°ΠΏΠ΅ построСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° .bgi Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Ρ‚ΠΈΠΏΠ° .obj ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ bgiobj.exe. ΠšΡΡ‚Π°Ρ‚ΠΈ, данная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ для конвСртирования chr-Ρ„Π°ΠΉΠ»ΠΎΠ² с Π³Ρ€Π°Ρ„ичСскими ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π½Π° ΡΡ‚Π°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚. Π΅. ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ графичСской систСмС, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΡƒΠΆΠ΅ находится Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Для этого сущСствуСт функция registerbgidriver, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ мСстополоТСниС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°:

int registerbgidriver (void (*driver)(void));

АргумСнт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — имя указатСля Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, содСрТащСС рСгистрируСмый Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. ИмСна ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…, созданных ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ bgiobj.exe. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ для стандартных Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²:

void CGA_driver (void);

void EGAVGA_driver (void);

void IBM8514_driver (void);

void Herc_driver (void);

void ATT_driver (void);

void PC3270_driver (void).

Если рСгистрация ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, функция graphresult Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС -4. ПослС рСгистрации Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ initfgraph, ΠΏΡ€ΠΈ этом Π΅Π΅ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся (пСрСдаСтся нулСвая строка ««).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ статичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы:

int main (void)

{

int gd, gm, err;

detectgraph (&gd,&gm);

err=graphresult ();

if (err)

{

printf («n%s», grapherrormsg (err));

return 1;

}

registerbgidriver (EGAVGA_driver);

err=graphresult (); /* ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ */

if (err)

{

printf («n%s», grapherrormsg (err));

return 1;

}

initgraph (&gd,&gm," «); /* инициализация систСмы */

if ((err = graphresult ()) ≠ grOk)

{

printf («n%s», grapherrormsg (err));

return 1;

}

/* …Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹…*/

closegraph (); /* Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы */

return 0;

}

Если графичСская систСма Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Ρ‚ΠΎ Π΄ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ initgraph Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ closegraph для освобоТдСния всСй памяти, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Π½ΠΈΠΌΠ°Π»Π° систСма.

Имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

char far *getdrivername (void);

Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ имя Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° графичСского Ρ€Π΅ΠΆΠΈΠΌΠ°, допустимоС для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

int far getmaxmode (void);

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° графичСского Ρ€Π΅ΠΆΠΈΠΌΠ° для Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция

int far getgraphmode (void);

По Π½ΠΎΠΌΠ΅Ρ€Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку с ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

char far *getmodename (int mode_number);

Π’ Π³Ρ€Π°Ρ„ичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π΅ΡΡ‚ΡŒ функция опрСдСлСния минимально ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€Π° графичСского Ρ€Π΅ΠΆΠΈΠΌΠ° для графичСского Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ся (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ)

void far getmoderange (int graph_driver, int far *min_mode, int far *max_mode);

Π•ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ установлСнный графичСский Ρ€Π΅ΠΆΠΈΠΌ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ обращСния ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ initgraph ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Скстовый Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°. Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ графичСский Ρ€Π΅ΠΆΠΈΠΌ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

void far setgraphmode (int new_mode);

АргумСнт new_mode ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ Ρ€Π΅ΠΆΠΈΠΌΠ° для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ максимально допустимоС для этого Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² Ρ‚Скстовый Ρ€Π΅ΠΆΠΈΠΌ прСдусмотрСна

функция

void far restorecrtmode (void);

Π­Ρ‚Π° функция ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€ Π² Ρ‚ΠΎΡ‚ тСкстовый Ρ€Π΅ΠΆΠΈΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π½Π°Ρ…одился Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ послСднСй ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ графичСской систСмы, Ρ‚. Π΅. нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ initgraph. Из Ρ‚Скстового Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² Π³Ρ€Π°Ρ„ичСский ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setgraphmode.

ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ графичСской систСмы всСвозмоТныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ систСмы ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ характСристики систСмы, установлСнныС ΠΏΡ€ΠΈ Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, сущСствуСт функция

void far graphdefaults (void);

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ дСйствия, выполняСмыС Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

Β· для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΎΡ‚обраТСния Π½Π° ΡΠΊΡ€Π°Π½Π΅ выбираСтся нулСвая страница видСопамяти;

Β· графичСскоС ΠΎΠΊΠ½ΠΎ устанавливаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π²ΠΎ Π²ΡΡŽ страницу;

Β· тСкущая графичСская позиция пСрСмСщаСтся Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (0,0);

Β· ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ†Π²Π΅Ρ‚Π° ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€ΠΈΡΡƒΡŽΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ (15) ΠΈ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° (0);

Β· устанавливаСтся сплошной шаблон для рисования Π»ΠΈΠ½ΠΈΠΉ ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ областСй;

Β· инициализируСтся встроСнный ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ со ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌ располоТСниСм ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ строки.

1.3. Π Π°Π±ΠΎΡ‚Π° с Ρ€Π°ΡΡ‚Ρ€ΠΎΠΌ Ρ‚ΠΎΡ‡Π΅ΠΊ

Растром Ρ‚ΠΎΡ‡Π΅ΠΊ называСтся двумСрная ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ экран дисплСя.

Π§Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° ΡΠΊΡ€Π°Π½Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ся страниц видСопамяти, Π² Π³Ρ€Π°Ρ„ичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ прСдусмотрСна функция

void far setvisualpage (int page);

Ѐункция Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π° ΡΠΊΡ€Π°Π½Π΅ Ρ‚Ρƒ ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρƒ видСопамяти, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с Π½ΡƒΠ»Ρ. Ѐункция graphresult Π½Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ нСдопустимый Π½ΠΎΠΌΠ΅Ρ€ страницы. Вся ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Π΅. Ѐункция

void far setactivepage (int page);

Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ пСрСрисовки страницы Π½Π° ΡΠΊΡ€Π°Π½Π΅ дисплСя, Π½ΠΎ Π·Π°Ρ‚ΠΎ направляСт вСсь ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ графичСский Π²Ρ‹Π²ΠΎΠ΄ Π½Π° Ρ‚Ρƒ ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρƒ, которая ΡƒΠΊΠ°Π·Π°Π½Π° Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Как ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° страницы остаСтся Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Π΅.

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρƒ видСопамяти (ΠΈ ΡΠΊΡ€Π°Π½ дисплСя) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ массив Ρ‚ΠΎΡ‡Π΅ΠΊ (пиксСлСй). На ΡΡ‚ΠΎΠΌ массивС Ρ‚ΠΎΡ‡Π΅ΠΊ вводится систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ X, Y. Начало систСмы Π»Π΅ΠΆΠΈΡ‚ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ страницы (экрана). Ось X ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ ΠΊΡ€Π°ΡŽ страницы слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π° ΠΎΡΡŒ Y — ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ свСрху Π²Π½ΠΈΠ·. ЛСвая вСрхняя Ρ‚ΠΎΡ‡ΠΊΠ° страницы ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (0, 0), правая ниТняя — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (M-1, N-1), Π³Π΄Π΅ M ΠΈ N — Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ страниц ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

int far getmaxx (void);

int far getmaxy (void);

ЗначСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ этими функциями, зависят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°, установлСнного функциями initgraph ΠΈΠ»ΠΈ setgraphmode.

Π’ Ρ€Π°ΡΠΏΠΎΡ€ΡΠΆΠ΅Π½ΠΈΠΈ программиста ΠΊΡ€ΠΎΠΌΠ΅ страницы ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ³ΠΎ имССтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° двумСрная структура. Π’Π½ΡƒΡ‚Ρ€ΠΈ основного массива Ρ‚ΠΎΡ‡Π΅ΠΊ страницы всСгда Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ подмассив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся графичСским ΠΎΠΊΠ½ΠΎΠΌ (viewport). ГрафичСскоС ΠΎΠΊΠ½ΠΎ являСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ массивом Ρ‚ΠΎΡ‡Π΅ΠΊ со ΡΠ²ΠΎΠ΅ΠΉ систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Начало этой систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ находится Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ графичСского ΠΎΠΊΠ½Π°, Π° ΠΎΡΠΈ X ΠΈ Y ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ осям ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ страницы. Π‘Π°ΠΌΠΎ ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² Π»ΡŽΠ±ΠΎΠΌ мСстС экрана. Π—Π°ΠΌΠ΅Π½Π° страницы Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ‚ Π½Π° Ρ…арактСристики ΠΎΠΊΠ½Π°.

МногиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ графичСского ΠΎΠΊΠ½Π°. Благодаря этому появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ графичСской Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΎΠΊΠ½Π΅ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ мСстС страницы ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ страницС ΠΎΠΊΠ½ΠΎ находится Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΡ€ΠΈ описании Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, какая систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (страницы ΠΈΠ»ΠΈ ΠΎΠΊΠ½Π°) имССтся Π² Π²ΠΈΠ΄Ρƒ.

ΠŸΡ€ΠΈ установкС графичСского Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ initgraph ΠΈ setgraphmode сразу ΠΆΠ΅ создаСтся ΠΈ Π³Ρ€Π°Ρ„ичСскоС ΠΎΠΊΠ½ΠΎ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ со Π²ΡΠ΅ΠΉ страницСй. Однако Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ графичСского ΠΎΠΊΠ½Π° динамичСски. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void far setviewport (int left.int top, int right, int bottom, int clip);

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° — это ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΈ ΠΏΡ€Π°Π²ΠΎΠΉ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ† графичСского ΠΎΠΊΠ½Π° Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ страницы. Ни ΠΎΠ΄Π½Π° ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ† ΠΎΠΊΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ страницы. ПослСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ устанавливаСт Ρ€Π΅ΠΆΠΈΠΌ отсСчСния: Ссли ΠΎΠ½ Π½Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ, Ρ‚ΠΎ Π²ΡΡΠΊΠΈΠΉ графичСский Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π΅Π·Π°Ρ‚ΡŒΡΡ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… графичСского ΠΎΠΊΠ½Π°. Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½Ρ†ΠΈΠΈ setviewport Π±Ρ‹Π»ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎ Π·Π°Π΄Π°Π½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚ΠΎ Ρ„ункция graphresult Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ -11 ΠΈ ΡΠΎΡ…ранится прСдыдущая установка графичСского ΠΎΠΊΠ½Π°. Ѐункция setviewport Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ‚ содСрТимоС страницы видСопамяти.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ установку графичСского ΠΎΠΊΠ½Π°, сущСствуСт функция

void far getviewsettings (struct viewporttype far *viewport);

Данная функция ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ *viewport. Π’ΠΈΠΏ этой структуры ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π΅ graphics. h:

struct viewporttype

{

int left, top, right, bottom;

int clip;

}

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ прСдставлСны Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ стра-Π½ΠΈΡ†Ρ‹.

Π‘ Π³Ρ€Π°Ρ„ичСским ΠΎΠΊΠ½ΠΎΠΌ связано понятиС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ графичСской ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ CP (current graphics position). Π­Ρ‚ΠΎ графичСский эквивалСнт курсора Π² Ρ‚Скстовом Ρ€Π΅ΠΆΠΈΠΌΠ΅. ВСкущая графичСская позиция сама собой Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚обраТаСтся Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ пиксСль графичСского ΠΎΠΊΠ½Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ привязываСтся дСйствиС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ прямолинСйных ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ графичСских тСкстов.

ΠŸΡ€ΠΈ установкС Π½ΠΎΠ²ΠΎΠ³ΠΎ графичСского ΠΎΠΊΠ½Π° тСкущая позиция автоматичСски помСщаСтся Π² Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Для явного измСнСния полоТСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void far moveto (int x, int y);

void far moverel (int dx, int dy);

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ CP ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ графичСского ΠΎΠΊΠ½Π°. Вторая ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ CP Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ (dx, dy).

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ графичСской ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ графичСского ΠΎΠΊΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

int far getx (void);

int far gety (void);

ΠŸΡ€ΠΈ пСрСустановкС графичСского ΠΎΠΊΠ½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ setviewport содСрТимоС страницы видСопамяти Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся. Для очистки графичСского ΠΎΠΊΠ½Π° Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ страницС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция

void far clearviewport (void);

CP ΠΏΡ€ΠΈ этом пСрСмСщаСтся Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ графичСского ΠΎΠΊΠ½Π°.

ΠŸΠΎΡ…ΠΎΠΆΠ°Ρ функция

void far cleardevice (void);

ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ всю Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ страницу. Установка графичСского ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈ этом Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся, Π° CP пСрСмСщаСтся Π² Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

На ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°Ρ… пиксСль, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ высвСчиваСтся Π½Π° ΡΠΊΡ€Π°Π½Π΅, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, вытянутого ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Π΅ страница Π²ΠΈΠ΄Π΅ΠΎΠ±ΡƒΡ„Π΅Ρ€Π° отобраТаСтся Π½Π° Π²Π΅ΡΡŒ экран, Π° ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΈ экрана ΠΈ ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ максимального Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹ с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ VGA, Π³Π΄Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ 640×480 Ρ‚ΠΎΡ‡Π΅ΠΊ всС пиксСли ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅). Π’Π°ΠΊΠΎΠ΅ нСсоотвСтствиС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡŽ анизотропности растра пиксСлСй: Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ, содСрТащиС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ число пиксСлСй, Π½Π° ΡΠΊΡ€Π°Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ Ρ€Π°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, окруТности ΠΈ ΠΈΡ… Π΄ΡƒΠ³ΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ΡΡ функциями Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ хранящийся Π² Π³Ρ€Π°Ρ„ичСской систСмС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ коэффициСнт ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (aspect ratio), ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ «ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ нСквадратности» пиксСля. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ произвСсти ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΡƒ количСства пиксСлСй ΠΏΠΎ Π΅Π³ΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ сторонам. Π˜ΡΡ‚ΠΈΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΈ пиксСля Π½Π° Π΄Π°Π½Π½ΠΎΠΌ дисплСС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void far getaspectratio (int far *x_asp, int far *y_asp);

Данная функция Ρ‡Π΅Ρ€Π΅Π· свои Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ *y_asp всСгда устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 10 000, Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° *x_asp? *y_asp. ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ *x_asp ΠΊ *y_asp ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² пиксСля. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ сторона ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° прСдставлСна ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠΌ Π΄Π»ΠΈΠ½ΠΎΠΉ X ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ стороны Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ выраТСния

Y = (int)(X β€’ (float)(*x_asp) / (*y_asp)).

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ коэффициСнт «Π½Π΅ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ности» автоматичСски учитываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€ΠΈΡΡƒΡŽΡ‚ окруТности ΠΈ ΠΈΡ… Π΄ΡƒΠ³ΠΈ, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ‚ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рисования эллипсов ΠΈ ΠΈΡ… Π΄ΡƒΠ³.

1.4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠΌ

Π¦Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ возмоТности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ графичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Borland C ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ся Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ° — Π·Π°ΠΊΠΎΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ допустимому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° пиксСля ставится Π² ΡΠΎΠΎΡ‚вСтствиС Ρ†Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ этот пиксСль Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π° ΡΠΊΡ€Π°Π½Π΅.

ΠŸΠ°Π»ΠΈΡ‚Ρ€Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ строк (Π²Ρ…ΠΎΠ΄ΠΎΠ²), сколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ допускаСтся для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° пиксСля Π² Π΄Π°Π½Π½ΠΎΠΌ графичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ° Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π½ΡƒΠ»Ρ Π΄ΠΎ N_palette-1. Π’ ΡΡ‚Ρ€ΠΎΠΊΠ΅ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ k ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ся ΠΊΠΎΠ΄ Ρ†Π²Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Π° Π²ΠΈΠ΄Π΅ΠΎΠ°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π° ΡΠΊΡ€Π°Π½Π΅ всС пиксСли страницы, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½Ρ‹ k. НулСвой Π²Ρ…ΠΎΠ΄ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ°, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, опрСдСляСт Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° экрана.

ВсС графичСскиС Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹:

Β· ΠΌΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… всС пиксСли ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… Ρ†Π²Π΅Ρ‚ΠΎΠ² — основного ΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ. ΠŸΠ°Π»ΠΈΡ‚Ρ€Ρƒ Ρ‚Π°ΠΊΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ;

Β· Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ с Ρ„иксированной ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ. Для измСнСния ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ° Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ графичСский Ρ€Π΅ΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ содСрТимого видСопамяти;

Β· графичСскиС Ρ€Π΅ΠΆΠΈΠΌΡ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ динамичСски (Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ содСрТимого видСопамяти) ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ†Π²Π΅Ρ‚Π° ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ Π²Ρ…ΠΎΠ΄Ρƒ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ°. К Π΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌ относятся Ρ€Π΅ΠΆΠΈΠΌΡ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² EGA, VGA, IBM8514.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ управлСния Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π² Borland C Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Π²Π°ΠΆΠ½Ρ‹ΠΉ элСмСнт — структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Π³Ρ€Π°Ρ„ичСских Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Π½Π° Π²ΡΠ΅Ρ… дисплСйных Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°Ρ…, ΠΊΡ€ΠΎΠΌΠ΅ VGA ΠΈ IBM8514, ΠΎΠ½Π° содСрТит ΠΊΠΎΠ΄Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°. Роль Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ VGA нСсколько иная ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна Π½ΠΈΠΆΠ΅. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ IMB8514 Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ, поэтому Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ всС, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ, Π½Π΅ ΠΎΡ‚носится ΠΊ ΡΡ‚ΠΎΠΌΡƒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ. НС ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ (ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ структурного Ρ‚ΠΈΠΏΠ°) графичСской систСмы с ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌΠ° с Π·Π°ΠΊΠΎΠ½ΠΎΠΌ прСобразования значСния пиксСля Π² Ρ†Π²Π΅Ρ‚.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΊΠ°ΠΊ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

#define MAXCOLOR 15

struct palettetype

{

unsigned char size;

signed char colors[MAX_COLORS+1];

};

Π³Π΄Π΅ size — это число строк Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ΅ для использования Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ графичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π° colors — массив Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… описаний Ρ†Π²Π΅Ρ‚Π°.

Для всСх ΠΌΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² с Ρ„иксированными ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°ΠΌΠΈ допускаСтся использованиС Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ 16 Ρ†Π²Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ‚очности ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ со ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌΠΈ Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ тСкстового Ρ€Π΅ΠΆΠΈΠΌΠ°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ кодируСтся числом ΠΎΡ‚ 0 Π΄ΠΎ 15. ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… графичСских Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива colors совпадаСт с Π΅Π³ΠΎ индСксом.

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ внутрСнняя ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° содСрТит 16 Ρ†Π²Π΅Ρ‚ΠΎΠ², ΠΊΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 63

(Ρ‚. Π΅. имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ содСрТаниС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹). Для 16 ΠΊΠΎΠ΄ΠΎΠ² Ρ†Π²Π΅Ρ‚ΠΎΠ² стандартного Π½Π°Π±ΠΎΡ€Π°, устанавливаСмых ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этих Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² (ΠΊΠ°ΠΊ для Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° EGA, Ρ‚Π°ΠΊ ΠΈ VGA), ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ пСрСчислимый Ρ‚ΠΈΠΏ EGA_COLORS, Ρ‚. Π΅. стандартныС ΠΊΠΎΠ΄Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ символичСскиС ΠΈΠΌΠ΅Π½Π°:

enum EGA_COLORS

{

EGA_BLACK=0, EGA_BLUE=1, EGA_GREEN=2, EGA_CYAN=3, EGA_RED=4, EGA_MAGENTA=5, EGA_BROWN=20, EGA_LIGHTGRAY=7, EGA_DARKGRAY=56, EGA_LIGHTBLUE=57, EGA_LIGHTGREEN=58, Π•GA_LIGHTCYAN=59, EGA_LIGHTRED=60, EGA_LIGHTMAGENTA=61, EGA_YELLOW=62, EGA_WHITE=63

};

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ динамичСски управляСмых строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ графичСского Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

int far getpalettesize (void);

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° пиксСля Π½Π° ΡΠΊΡ€Π°Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ индСкс Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² дисплСйного Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°. МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° пиксСля, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для записи Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ функциями, ΠΊΠ°ΠΊ графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹, возвращаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

int far getmaxcolor (void);

НСпосрСдствСнноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ setpalette ΠΈΠ»ΠΈ setallpalette. ΠŸΠ΅Ρ€Π²Π°Ρ измСняСт содСрТаниС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹, Π° Π²Ρ‚орая всСх сразу. Бинтаксис ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

void far setpalette (int num_color_pallete, int num_color);

АргумСнт num_color_palette Π·Π°Π΄Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ измСняСмого Π²Ρ…ΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚ Π½ΡƒΠ»Ρ Π΄ΠΎ size-1 (size — элСмСнт структуры Π΄Π°Π½Π½Ρ‹Ρ… palettetype). АргумСнт color Π·Π°Π΄Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ†Π²Π΅Ρ‚Π° для этого Π²Ρ…ΠΎΠ΄Π° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 63 (Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡˆΠ΅ΡΡ‚ΡŒ ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π±ΠΈΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° num_color).

Другая функция, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ, ΠΈΠΌΠ΅Π΅Ρ‚ синтаксис:

void far setallpalette (struct palettetype far *palette);

АргумСнт Π΅Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π²Π°-Ρ€ΠΈΠ°Π½Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹. ВсС измСнСния Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ функциями setpalette ΠΈ setallpalette Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° ΡΠΊΡ€Π°Π½Π΅ дисплСя.

Π¦Π²Π΅Ρ‚ΠΎΠΌ Ρ„ΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void far setbkcolor (int num_color_palette);

ДСйствиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π²Ρ…ΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ связываСтся со Π²Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ num_color_palette. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ записываСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ содСрТится Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ num_color_palette. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния содСрТимого элСмСнта с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ num_color_palette Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ функция setpalette (0, color) просто измСняСт Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°, Π½ΠΎ Π½Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π²Ρ…ΠΎΠ΄ Π½ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ установки Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΎΠ½Π° являСтся функция

int far getbkcolor (void);

которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°, Ρ‚. Π΅. Π½ΠΎΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ связан Π² Π½Π°ΡΡ‚оящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π²Ρ…ΠΎΠ΄. Если Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setbkcolor Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ связывания Π½ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌ Π²Ρ…ΠΎΠ΄ΠΎΠΌ, Ρ‚ΠΎ getbkcolor Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0.

Для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ сущСствуСт Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

void far getpalette (struct palettetype far *palette);

struct palettetype far *getdefaultpalette (void);

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹. Другая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽΡΡ Π² Π³Ρ€Π°Ρ„ичСской систСмС структуру, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ эталон Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚Ρƒ структуру, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сам эталон ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹. Π’Π°ΠΊΠΈΠ΅ измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°.

ВсС Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ способы динамичСского управлСния Ρ†Π²Π΅Ρ‚ΠΎΠΌ рассчитаны Π½Π° Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… пиксСль ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Π±ΠΈΡ‚Π°ΠΌΠΈ. Однако Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π²ΠΎΡΡŒΠΌΠΈΠ±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° пиксСля (IBM8414 ΠΈ VGA, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² 256 Π²Ρ…ΠΎΠ΄ΠΎΠ²). Для Π½ΠΈΡ… сущСствуСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°, которая содСрТит 256 Π²Ρ…ΠΎΠ΄ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ соотвСтствуСт ΠΊΠΎΠ΄Ρƒ Ρ†Π²Π΅Ρ‚Π°. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄Ρƒ соотвСтствовал Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ Ρ†Π²Π΅Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция

void far setrgbpalette (int num_color, int red, int green, int blue);

АргумСнт num_color — Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ…ΠΎΠ΄Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (0−255), ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ хранятся Ρ‚Ρ€ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ — красная, зСлСная ΠΈ ΡΠΈΠ½ΡΡ — ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ†Π²Π΅Ρ‚. Ѐункция позволяСт Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎ Π²Ρ…ΠΎΠ΄Ρƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ color Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ red, green ΠΈ blue. ΠŸΡ€ΠΈ этом Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ младшиС ΡˆΠ΅ΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±Ρ‰Π΅Π΅ количСство Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΎΠ² Ρ€Π°Π²Π½ΠΎ N_colors=64*64*64=256К.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности использования Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° VGA. ЗначСния элСмСнтов массива colors (ΠΊΠΎΠ΄ΠΎΠ² Ρ†Π²Π΅Ρ‚ΠΎΠ²) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ слуТат индСксами для поиска Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΎΡ‚ΠΊΡƒΠ΄Π° происходит Π²Ρ‹Π±ΠΎΡ€ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ° Ρ†Π²Π΅Ρ‚Π°.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ функция setrgbpalette ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄ΠΈΡΠΏΠ»Π΅ΠΉΠ½Ρ‹ΠΌΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ VGA ΠΈ IBM8514. На Π΄Ρ€ΡƒΠ³ΠΈΡ… конфигурациях ΠŸΠš ΠΎΠ½Π° игнорируСтся. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ IBM8514 ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setrgbpalette.

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ понятиС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния Ρ€ΠΈΡΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π° (current drawing color). Π ΠΈΡΡƒΡŽΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ — это Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функциями рисования для записи Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ пиксСлСй. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€ΠΈΡΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ getmaxcolor.

БущСствуСт функция, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ явно ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€ΠΈΡΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π°:

void far setcolor (int num_color_palette);

ΠŸΡ€ΠΈ рисовании ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†Π²Π΅Ρ‚, Ρ‡Π΅ΠΉ ΠΊΠΎΠ΄ записан ΠΏΠΎ Π²Ρ…ΠΎΠ΄Ρƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ num_color_palette. Π£Π·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€ΠΈΡΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

int far getcolor (void);

1.5. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа ΠΊ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ вся Ρ€Π°Π±ΠΎΡ‚Π° с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ сводится ΠΊ ΠΎΠ±ΠΌΠ΅Π½Ρƒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠ±ΡƒΡ„Π΅Ρ€ΠΎΠΌ дисплСйного Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°.

Доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ пиксСлям Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ страницы ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

unsigned far getpixel (int x, int y);

void far putpixel (int x, int y, int num_color_palette);

Ѐункция getpixel Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ (Π²Ρ…ΠΎΠ΄ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ) пиксСля с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (x, y). А Ρ„ункция putpixel рисуСт пиксСль Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (x, y) Ρ†Π²Π΅Ρ‚ΠΎΠΌ, Ρ‡Π΅ΠΉ ΠΊΠΎΠ΄ содСрТится ΠΏΠΎ Π²Ρ…ΠΎΠ΄Ρƒ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ num_color_palette.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ функциям getpixel ΠΈ pupixel ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ пиксСля Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ графичСского ΠΎΠΊΠ½Π°, Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ любого пиксСля страницы, Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π²Π½Π΅ ΠΎΠΊΠ½Π°. ΠŸΡ€ΠΈ этом getpixel Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ пиксСля. ПовСдСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ putpixel зависит ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° отсСчСния, установлСнного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ послСднСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setviewport. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ getpixel ΠΈ pupixel с Π²Ρ‹Ρ…одящими Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ страницы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Ρ‚ΠΎΡ‡Π΅ΠΊ нСпрСдсказуСмы.

ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π° с Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ пиксСлями графичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт возмоТности для ΠΎΠ±ΠΌΠ΅Π½Π° Ρ†Π΅Π»Ρ‹ΠΌΠΈ массивами пиксСлСй. Π­Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ страницы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌ ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΠΌ мСстС. ОбмСн производится ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ массивами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ своих ΡƒΠ³Π»ΠΎΠ² Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ графичСского ΠΎΠΊΠ½Π°.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ страницы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ для этого объСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ВсС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ вычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ функция

unsigned far imagesize (int left, int top, int right, int bottom);

Она ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡƒΠ³Π»Π° сохраняСмой области. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ выдСлСния памяти для рСзСрвирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ пространства. Если объСм памяти, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ для сохранСния изобраТСния, прСвосходит 64К-1, Ρ‚ΠΎ Ρ„ункция всС Ρ€Π°Π²Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0xFFFF, Π½ΠΎ ΠΏΡ€ΠΈ этом graphresult Π²Ρ‹Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -11.

ПослС рСзСрвирования Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ объСма ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ массив пиксСлСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void far getimage (int left, int top, int right, int bottom, void far *bitmap);

ПослСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ массив.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ массив пиксСлСй, сохранСнный с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getimage, снова Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ страницу, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция

void far putimage (int left, int top, void far *bitmap, int op);

ΠŸΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ мСстополоТСниС массива пиксСлСй (Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π°), Π½ΠΎ ΠΈ Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ Π΅Π³ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ страницу видСопамяти, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сдСлав Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setactivepage. ПослСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ putimage ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ пиксСлСй массива, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ страницу, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ находящиСся Π² Π²ΠΈΠ΄Π΅ΠΎΠ±ΡƒΡ„Π΅Ρ€Π΅ значСния. Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС, ΠΊΠΎΠ³Π΄Π° op = 0, происходит простоС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² пиксСлСй ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒ. Однако Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ содСрТимым ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠ±ΡƒΡ„Π΅Ρ€Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля массива. ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ задаСтся пСрСчислимым Ρ‚ΠΈΠΏΠΎΠΌ putimage_ops:

enum putimage_ops

{COPY_PUT, XOR_PUT, OR_PUT, AND_PUT, NOT_PUT};

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ункциями getimage ΠΈ putimage Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Π»Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ getpixel ΠΈ putpixel: хотя ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ графичСского ΠΎΠΊΠ½Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ массив пиксСлСй, располоТСнный Π² Π»ΡŽΠ±ΠΎΠΌ мСстС Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ страницы. Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя функциями состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ getimage «ΡΡ…Π²Π°Ρ‚ΠΈΡ‚» этот массив, Π° Ρ„ункция putimage Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ массив Π½Π° ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρƒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ графичСского ΠΎΠΊΠ½Π° Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΎ (Ρ‚. Π΅. игнорируСтся Ρ€Π΅ΠΆΠΈΠΌ отсСчСния).

Если ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ массива пиксСлСй (вСсь массив ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ) выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ страницы, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ getimage ΠΈ putimage нСпрСдсказуСм.

1.6. ГрафичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹

ОсновноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² — ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств для рисования всСвозмоТных гСомСтричСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Условно ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ всС графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ рисуСмых ΠΈΠΌΠΈ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹: ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄Π½Ρ‹Π΅. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ€ΠΈΡΡƒΡŽΡ‚ всСвозмоТныС ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ. Ко Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ относятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для рисования гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€ с Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠΌΠΈ областСй.

К Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹Ρ… графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² относятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

void far line (int x1, int y1, int x2, int y2);

void far linerel (int dx, int dy);

void far lineto (int x, int y);

void far rectangle (int left, int top, int right, intbottom);

void far drawpoly (int num_points, int far *poly_points);

void far circle (int x, int y, int radius);

void far arc (int x, int y, int start_angle, int end_angle, int radius);

void far ellipse (int x, int y, int start_angle, int end_angle, int x_radius, int y_radius);

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡΡ‚ΡŒ Ρ€ΠΈΡΡƒΡŽΡ‚ кусочно-Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π² Ρ‚ΠΎΠΌ числС ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, составлСнныС ΠΈΠ· ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² прямых), ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ — ΠΊΡ€ΠΈΠ²Ρ‹Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ порядка (Π΄ΡƒΠ³ΠΈ окруТностСй ΠΈ ΡΠ»Π»ΠΈΠΏΡΠΎΠ²).

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ line, linerel ΠΈ lineto ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ плоскости ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠΌ прямой. Для ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΎΠ±Π΅ соСдиняСмыС Ρ‚ΠΎΡ‡ΠΊΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ явно своими ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ linerel ΠΈ lineto Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ CP, Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ функциям moverel ΠΈ moveto, Ρ‚. Π΅. Ρ‡Π΅Ρ€Π΅Π· приращСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈΠ»ΠΈ ΠΏΠΎ ΡΠ²Π½ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Π½ΠΈΡŽ. ВсС Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ графичСского ΠΎΠΊΠ½Π°. Однако ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, Π΄Π°ΠΆΠ΅ Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ страницы. Ѐункция graphresult Π½Π΅ ΡΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, Π° ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ линия проводится ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Если для ΠΎΠΊΠ½Π° установлСн Ρ€Π΅ΠΆΠΈΠΌ отсСчСния, Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΠΈ Π»ΠΈΠ½ΠΈΠΈ, выходящиС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΎΠΊΠ½Π°, Π½Π΅ Π·Π°Π½ΠΎΡΡΡ‚ся Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒ.

Ѐункция rectangle рисуСт Π½Π° ΡΡ‚Ρ€Π°Π½ΠΈΡ†Π΅ видСопамяти ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡƒΠ³Π»Π°.

Ѐункция drawpoly рисуСт Π»ΠΎΠΌΠ°Π½ΡƒΡŽ линию, соСдиняя Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ пСрСдаСтся количСство Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΌΠ°ΡΡΠΈΠ² Ρ†Π΅Π»Ρ‹Ρ… чисСл. КаТдая ΠΏΠ°Ρ€Π° чисСл ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ массива интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (x, y) ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΡƒΡŽ Π»ΠΎΠΌΠ°Π½ΡƒΡŽ линию (ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ), пСрвая ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠ°Ρ€Ρ‹ элСмСнтов массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ.

Ѐункция circle рисуСт ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ радиусом radius с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (x, y). Ѐункция arc ΠΈ ellipse Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π΄ΡƒΠ³ΠΈ окруТности ΠΈ ΡΠ»Π»ΠΈΠΏΡΠ° с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ (x, y), соотвСтствСнно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΡƒΠ³Π»Π°ΠΌΠΈ start_angle ΠΈ end_engle. Для Π΄ΡƒΠ³ΠΈ окруТности задаСтся Π΅Π΅ Ρ€Π°Π΄ΠΈΡƒΡ radius, Π° Π΄Π»Ρ Π΄ΡƒΠ³ΠΈ эллипса радиусы ΠΏΠΎ ΠΎΡΡΠΌ x_radius ΠΈ y_radius. Оси эллипса всСгда ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ осям ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ страницы.

Π£Π³Π»Ρ‹, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π΄ΡƒΠ³ΠΈ, Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π³Ρ€Π°Π΄ΡƒΡΠ°Ρ… ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки ΠΎΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ осью X ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρ‹. Π”ΡƒΠ³Π° всСгда проводится ΠΎΡ‚ ΡƒΠ³Π»Π° start_angle ΠΊ ΡƒΠ³Π»Ρƒ end_angle Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки.

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ rectangle, drawpoly, circle, arc ΠΈ ellipse справСдливы замСчания ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° отсСчСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сдСланы ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ рисования Π»ΠΈΠ½ΠΈΠΉ.

Π‘ Π΄ΡƒΠ³Π°ΠΌΠΈ окруТностСй связана функция

void far getarccoords (struct arccoordstype far *arccoords);

Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ характСристики Π΄ΡƒΠ³ΠΈ окруТности, построСнной ΠΏΡ€ΠΈ послСднСм Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ arc. Π₯арактСристики Π΄ΡƒΠ³ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ *arccoords. Π’ΠΈΠΏ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом:

struct arccoordstype

{

int x, y;

int x_start, y_start, x_end, y_end;

};

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠ°Ρ€Π° чисСл — это ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° окруТности, вторая ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° Π΄ΡƒΠ³ΠΈ. ЗначСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ привязаны ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ графичСского ΠΎΠΊΠ½Π°.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ внСшний Π²ΠΈΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ ΠΈ Ρ‚ΠΈΠΏ Π»ΠΈΠ½ΠΈΠΈ, Ρ†Π²Π΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ВсС ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹Π΅ графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ пиксСли Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ Ρ€ΠΈΡΡƒΡŽΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ setcolor.

Для кусочно-Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½ΠΈΡ…, имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠΎΠ΄ Ρ€ΠΈΡΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ пиксСлСй, ΡƒΠΆΠ΅ находящимися Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ Π½Π° ΠΌΠ΅ΡΡ‚Π΅ рисуСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π—Π΄Π΅ΡΡŒ дСйствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, описанный для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ putimage. Π’Ρ‹Π±ΠΎΡ€ способа осущСствляСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

void far setwritemode (int mode);

АргумСнт этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 (простоС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° пиксСля Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒ) ΠΈ 1 (опСрация «ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ ΠΈΠ»ΠΈ»).

Ѐункция

void far setlinestyle (int line_style, unsigned user_pattern, int thickness);

устанавливаСт Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΈ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ Π»ΠΈΠ½ΠΈΠΉ гСомСтричСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². АргумСнт thickness воздСйствуСт Π½Π° ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹Π΅ графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹, Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ line_style ΠΈ user_pattern — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΊΡƒΡΠΎΡ‡Π½ΠΎ-Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅.

АргумСнт thickness ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния NORM_WIDTH (Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° Ρ€Π°Π²Π½Π° 1 пиксСль) ΠΈ THICK_WIDTH (Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° Ρ€Π°Π²Π½Π° 3 пиксСлям). АргумСнт linestyle Π·Π°Π΄Π°Π΅Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ рисуСмой Π»ΠΈΠ½ΠΈΠΈ. ЗначСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚ пСрСчислимого Ρ‚ΠΈΠΏΠ° line_styles (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SOLID_LINE ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠΏΠ»ΠΎΡˆΠ½ΡƒΡŽ линию):

enum line_styles

{

SOLID_LINE=0,DOTTED_LINE, CENTER_LINE,

DASHED_LINE, USERBIT_LINE

};

Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° line_style Ρ€Π°Π²Π½ΠΎ USERBIT_LINE, Ρ‚ΠΎ ΡΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ построСнии кусочно-Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ шаблон, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ программистом ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setlinestyle ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° user_pattern. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблона ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ пСриодичСски ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉΡΡ рисунок Π»ΠΈΠ½ΠΈΠΈ с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠΌ Π΄ΠΎ 16 пиксСлСй. Если Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΠΈΡ‚ шаблона user_pattern Ρ€Π°Π²Π΅Π½ 1, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ пиксСль Π»ΠΈΠ½ΠΈΠΈ рисуСтся, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС — Π½Π΅Ρ‚.

Установки, сдСланныС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setlinestyle, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π°. Для выяснСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ установки характСристик Π»ΠΈΠ½ΠΈΠΉ прСдусмотрСна функция

void far getlinesettingstype (struct linesettingstype far *line_info);

Данная функция заносит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ описаниС

struct linesettingstype

{

int linestyle;

unsigned upattern;

int thickness;

}

Π“Ρ€ΡƒΠΏΠΏΠ° ΠΏΠ»ΠΎΡ‰Π°Π΄Π½Ρ‹Ρ… графичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹:

void far bar (int left, int top, int right, int bottom);

void far bar3d (int left, int top, int right, int bottom, int depth, int top_flag);

void far fillpoly (int num_points, int far *poly_points);

void far fillellipse (int x, int y, int x_radius, int y_radius);

void far pieslice (int x, int y, int start_angle, int end_angle, int radius);

void far sector (int x, int y, int start_angle, int end_angle, int x_ radius, int y_radius);

void far floodfill (int x, int y, int num_color_palette);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ bar ΠΈ bar3d строят ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π΄Π°Π½Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Ѐункция bar Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ внСшний ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Π° Ρ„ункция bar3d Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обрамляСт ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠΌ дорисовываСт ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π°, построСнного Π½Π° Π±Π°Π·Π΅ этого ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. Π“Π»ΡƒΠ±ΠΈΠ½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ задаСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ depth, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ top_flag ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ (Ссли Π½Π΅ Π½ΡƒΠ»ΡŒ) ΠΈΠ»ΠΈ Π½Π΅ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ (Ссли Π½ΡƒΠ»ΡŒ) Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅ Ρ€Π΅Π±Ρ€Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π°.

Ѐункция fillpoly ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ drawpoly, рисуСт ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Однако Ссли функция drawpoly допускаСт Π½Π΅Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹, Ρ‚ΠΎ Ρ„ункция fillpoly всСгда соСдиняСт послСднюю Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌ спискС с ΠΏΠ΅Ρ€Π²ΠΎΠΉ, автоматичСски замыкая ΠΊΠΎΠ½Ρ‚ΡƒΡ€.

Ѐункция fillellipse заполняСт эллипс с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ (x, y) ΠΈ Ρ€Π°Π΄ΠΈΡƒΡΠ°ΠΌΠΈ x_radius ΠΈ y_radius. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½Π° рисуСт ΠΊΠΎΠ½Ρ‚ΡƒΡ€ эллипса.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ pieslice ΠΈ sector ΠΏΠΎΡ…ΠΎΠΆΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ сСктора, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ pieslice Π΄Π΅Π»Π°Π΅Ρ‚ это для ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΎΠ³ΠΎ сСктора, Π° sector для эллиптичСского. АргумСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ся, Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Π»Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ arc ΠΈ ellipse соотвСтствСнно. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ сСктор Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½, рисуСтся Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚ΡƒΡ€. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ arc ΠΈ ellipse, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pieslice ΠΈ sector строят сСктор ΠΎΡ‚ ΠΌΠ΅Π½ΡŒΡˆΠ΅Π³ΠΎ значСния ΡƒΠ³Π»Π° ΠΊ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ (Π° Π½Π΅ ΠΎΡ‚ start_angle ΠΊ end_angle). Из-Π·Π° этого Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pieslice ΠΈ sector ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ сСктор, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ оси X.

Ѐункция floodfill ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ областСй, ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° ΡΡ‚Ρ€Π°Π½ΠΈΡ†Π΅. Для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ Π±Ρ‹Π» Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ ΠΈ ΡΠΎΡΡ‚оял ΠΈΠ· ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ num_color_palette (Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ…ΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹). ΠšΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠ΄Π° ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°, функция floodfill ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ начинаСтся Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ области. Π­Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°.

ВсС ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ пиксСлями Ρ€ΠΈΡΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ setcolor. Π–Π΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ изобраТСния ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ) устанавливаСтся Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это дСлаСтся для ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ².

Для управлСния Π²ΠΈΠ΄ΠΎΠΌ заполнСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области слуТит функция

void far setfillstyle (int pattern, int num_color_palette);

Данная функция ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ устанавливаСт Ρ‚ΠΈΠΏ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ шаблона заполнСния ΠΈ ΠΊΠΎΠ΄ заполнСния (Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ…ΠΎΠ΄Π° Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ). НуТно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ области Π½Π΅Ρ‚ возмоТности Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄Π°ΠΌΠΈ шаблона ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ пиксСлСй области, Ρ‚. Π΅. всСгда происходит ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ пиксСлСй области ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ² шаблона. АргумСнт pattern ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΈΠΏ устанавливаСмого шаблона. БущСствуСт нСсколько Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΈΡ… ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ пСрСчислимым Ρ‚ΠΈΠΏΠΎΠΌ fill_patterns:

enum fill_pattern

{

EMPTY_FILL=0,SOLID_FILL, LINE_FILL, LTSLASH_FILL,

SLASH_FILL, BKSLASH_FILL, LTBKSLASH_FILL,

HATCH_FILL, XHATCH_FILL, INTERLEAVE_FILL,

WIDE_DOT_FILL, CLOSE_DOT_FILL, USER_FILL

};

АргумСнт pattern ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ значСния, ΠΊΡ€ΠΎΠΌΠ΅ USER_FILL. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой константы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ getfillsettings (см. Π΄Π°Π»Π΅Π΅).

Π¨Π°Π±Π»ΠΎΠ½ условно ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8×8 элСмСнтов. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ шаблона ΠΈΠΌΠ΅ΡŽΡ‚ значСния 0 ΠΈΠ»ΠΈ 1. Если элСмСнт Ρ€Π°Π²Π΅Π½ 1, Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ пиксСля области Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ num_color_palette, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ пиксСля ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ„ΠΎΠ½Π°.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ созданиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… шаблонов нСпосрСдствСнно Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Для этого слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

void far setfillpattern (char far *user_pattern, int num_color_palette);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ user_pattern ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ шаблон заполнСния, описанный Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setfillstyle. Данная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ состоит ΠΈΠ· Π²ΠΎΡΡŒΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ², Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π±ΠΈΡ‚ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° являСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строкой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ шаблона.

ΠŸΠ»ΠΎΡ‰Π°Π΄Π½Ρ‹Π΅ графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ заполнСния, установлСнныС ΠΏΡ€ΠΈ послСднСм Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ setfillstyle ΠΈΠ»ΠΈ setfillpatern. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ назначСния для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² заполнСния областСй, прСдусмотрСны Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void far getfillsettings (struct fillsettingstype far *fill_info);

void far getfillpattern (char far *user_pattern);

ΠŸΠ΅Ρ€Π²Π°Ρ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ fill_info ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ заносится Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°:

struct fillsettingstype

{

int pattern;

int color;

};

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ структуры pattern ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ шаблона (Ссли ΠΎΠ½ Ρ€Π°Π²Π΅Π½ USER_FILL, Ρ‚ΠΎ ΡΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ шаблон Π·Π°Π΄Π°Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ), элСмСнт color содСрТит ΠΊΠΎΠ΄ заполнСния (Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ…ΠΎΠ΄Π° Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ). Вторая функция ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌΡƒ Π΅ΠΉ Π°Π΄Ρ€Π΅ΡΡƒ записываСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ шаблона, ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

1.7. Π’Ρ‹Π²ΠΎΠ΄ графичСского тСкста

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для формирования Π½Π° ΡΡ‚Ρ€Π°Π½ΠΈΡ†Π°Ρ… видСопамяти тСкстовых сообщСний с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСдоставляСмыми ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ графичСской систСмы. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ графичСского Π·Π½Π°ΠΊΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° выполняСт функция settextstyle.

Π’ Borland C ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Π³Ρ€Π°Ρ„ичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ с Π΄Π²ΡƒΠΌΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ графичСских ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²: ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ (bit-mapped) ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ (stroked). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚ΠΈΠΏ прСдставляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ встроСнным Π² BIOS ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π¨Ρ€ΠΈΡ„Ρ‚ΠΎΠ² Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько.

Набор символов ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС 256 допустимых ASCII-ΠΊΠΎΠ΄Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ символ ΡˆΡ€ΠΈΡ„Ρ‚Π° прСдставлСн Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹) Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8×8 пиксСлСй. Π’Π°ΠΊ ΠΊΠ°ΠΊ этот Π½Π°Π±ΠΎΡ€ символов встроСн Π² BIOS, Ρ‚ΠΎ Π½Π΅ Ρ‚рСбуСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ графичСских ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ рисованиС символов Ρ‚ΠΎΠ½ΠΊΠΈΠΌΠΈ линиями. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ символ прСдставлСн ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ прямых Π»ΠΈΠ½ΠΈΠΉ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΡ… характСристичСскиС Ρ‚ΠΎΡ‡ΠΊΠΈ символа. Π’Π°Π±Π»ΠΈΡ†Ρ‹ символов Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .chr. Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ 256-Ρ‚ΠΈ ΠΊΠΎΠ΄ΠΎΠ². ΠžΠ±Ρ‰ΠΈΠΌΠΈ для всСх ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ символы с ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΎΡ‚ 32 Π΄ΠΎ 126. Π Π°Π·Π½Ρ‹Π΅ символы ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ символа.

БущСствуСт пСрСчислимый Ρ‚ΠΈΠΏ font_names, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ символичСскиС ΠΈΠΌΠ΅Π½Π° для Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² пяти графичСских ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² (ΠΎΠ΄ΠΈΠ½ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΈΠ· ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°):

enum font_names

{

DEFAULT_FONT=0, TRIPLEX_FONT, SMALL_FONT, SANS_SERIF_FONT, GOTHIC_FONT

};

НаиболСС простым способом ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π½Π°ΠΊΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° (Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ символов) являСтся автоматичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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