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

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ графичСских Π΄Π°Π½Π½Ρ‹Ρ…. 
ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ². 
ИспользованиС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… эффСктов

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

Π”Π°Π½Π½Ρ‹Π΅ изобраТСния, записанныС Π² Ρ„Π°ΠΉΠ»Π΅ TGA, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ (Π½Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ся). По ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ„Π°ΠΉΠ»Ρ‹ TGA, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, вСсьма Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈ, особСнно Ссли растровыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ 24 ΠΈΠ»ΠΈ 32 Π±ΠΈΡ‚Π°. На ΡΡ‚ΠΎΡ‚ случай спСцификациСй TGA прСдусмотрСна простая, Π½ΠΎ ΡΡ„фСктивная схСма сТатия RLE. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ любого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сТато ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° RLE. Π’ ΡΠΆΠ°Ρ‚ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ графичСских Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ². ИспользованиС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… эффСктов (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1 ОписаниС графичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π°
  • 1.1 Π€ΠΎΡ€ΠΌΠ°Ρ‚ TGA
  • 1.1.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°
  • 1.1.3 ЦвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π°
  • 1.1.4 Π”Π°Π½Π½Ρ‹Π΅ изобраТСния
  • 1.2 Π€ΠΎΡ€ΠΌΠ°Ρ‚ BMP
  • 1.2.1 Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ BMP
  • 1.2.2 Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°
  • 1.2.3 ΠŸΠ°Π»ΠΈΡ‚Ρ€Π° BMP
  • 1.2.4 Π”Π°Π½Π½Ρ‹Π΅ изобраТСния BMP
  • 2 ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° отобраТСния Ρ„Π°ΠΉΠ»Π°
  • 2.1 ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° TGAΠ‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA прСдставлСно Π½Π° Ρ€ΠΈΡ. 2.1.
  • 2.2 ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° BMP
  • 2.3 ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ изобраТСния
  • 3. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ эффСктов
  • 3.1 Π—Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ B
  • 3.2 Π—Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ S
  • 3.3 Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ изобраТСния
  • 4. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ичСскими Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ
  • 4.1 Π’Ρ‹Π±ΠΎΡ€ срСдств для описания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • 4.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • 4.3 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅
  • 4.4 ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡΡ…
  • 5. ВСстированиС, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Π’Ρ‹Π²ΠΎΠ΄Ρ‹
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π’ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ — это любая Ρ„ΠΎΡ€ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ…ΠΎΠ΄ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ изобраТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Π΄Ρ€Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ» являСтся частным случаСм Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ». Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ — ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° изобраТСния (Π² Π½Π°ΡΡ‚оящСС врСмя, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ).

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

БСгодня Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ проводится Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ растровыми Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для просмотра ΠΈ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ часто ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ вмСстС с Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ Ρ„ΠΎΡ‚ΠΎΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°ΠΌΠΈ. Π‘ΠΎΠ»Π΅Π΅ слоТныС ΠΈ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Adobe Photoshop, Corel PHOTO-PAINT, Paint Shop Pro, Microsoft Picture It!, Visualizer Photo Studio, Pixel image editor, PixBuilder Photo Editor, Fo2Pix ArtMaster, GIMP ΠΈ ΠΏΡ€.) Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ Π½Π΅ Π»ΠΈΡˆΠ΅Π½Ρ‹ нСдостатков, ΠΎΠ΄Π½Π°ΠΊΠΎ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π·Π°Π΄Π°Ρ‡, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Они ΠΌΠΎΠ³ΡƒΡ‚, Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ стСпСни, ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ тСхничСскиС Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹, Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ„ΠΎΡ‚ΠΎΡΡŠΠ΅ΠΌΠΊΠΈ.

1. ОписаниС графичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π°

Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π²ΡƒΠΌΡ графичСскими Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ — TGA ΠΈ BMP. Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ….

1.1 Π€ΠΎΡ€ΠΌΠ°Ρ‚ TGA

1.1.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

ГрафичСскиС Ρ„Π°ΠΉΠ»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ;

Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ изобраТСния;

Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ цвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π°;

растровыС Π΄Π°Π½Π½Ρ‹Π΅.

Рассмотрим ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

1.1.2 Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA ΠΈΠΌΠ΅Π΅Ρ‚ структуру, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.1.

ПолС IDLength — ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ поля ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ΄Π΅Ρ‚ сразу Π·Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Ссли это ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎΠ΅ 0, Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ изобраТСния Π² Ρ„Π°ΠΉΠ»Π΅ отсутствуСт.

ColorMapType — опрСдСляСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если это ΠΏΠΎΠ»Π΅ Ρ€Π°Π²Π½ΠΎ 1 — Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΅ΡΡ‚ΡŒ, 0 — Π½Π΅Ρ‚, Ссли Π»Π΅ΠΆΠΈΡ‚ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚ 2 Π΄ΠΎ 255 — Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΅ΡΡ‚ΡŒ, Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΅Π΅ ΠΏΠΎΠ½ΡΡ‚Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, создавшСй Ρ„Π°ΠΉΠ».

Π’Π°Π±Π»ΠΈΡ†Π° 1.1 — Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π° TGA

ПолС

Π Π°Π·ΠΌΠ΅Ρ€, Π±Π°ΠΉΡ‚

ОписаниС

IDLength

Π Π°Π·ΠΌΠ΅Ρ€ поля ID-изобраТСния

ColorMapType

Π’ΠΈΠΏ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ImageType

Код Ρ‚ΠΈΠΏΠ° изобраТСния

CmapStart

Начало Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

CmapLength

Π”Π»ΠΈΠ½Π° Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

CmapDepth

Π“Π»ΡƒΠ±ΠΈΠ½Π° элСмСнтов Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Xoffset

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Π₯-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° изобраТСния

Yoffset

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Y-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° изобраТСния

Width

Π¨ΠΈΡ€ΠΈΠ½Π° изобраТСния

Height

Высота изобраТСния

PixelDepth

Π“Π»ΡƒΠ±ΠΈΠ½Π° пиксСля изобраТСния

ImageDescriptor

Π‘Π°ΠΉΡ‚ дСскриптора изобраТСния

ПолС ImageType опрСдСляСт Ρ‚ΠΈΠΏ изобраТСния, содСрТащСгося Π² Ρ„Π°ΠΉΠ»Π΅. Π’ Π½Π°ΡΡ‚оящСС врСмя сущСствуСт сСмь Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠΎΠ², описаниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставлСно Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.2.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ поля (CMapStart, CMapLength ΠΈ CMapDepth) ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. БодСрТащаяся Π² Π½ΠΈΡ… информация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для манипуляции Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ изобраТСния. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля ColorMapType Ρ€Π°Π²Π½ΠΎ 0, Ρ‚ΠΎ ΠΈ ΡΡ‚ΠΈ поля Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния.

ПолС CMapStart опрСдСляСт смСщСниС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π₯отя всС элСмСнты Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π² Π»ΡŽΠ±ΠΎΠΌ Π΅Π΅ ΠΌΠ΅ΡΡ‚Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 16-Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны Π² 64-элСмСнтной Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, начиная с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° 31, Π° Π½Π΅ с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° 0).

Π’Π°Π±Π»ΠΈΡ†Π° 1.2 — Π’ΠΈΠΏΡ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния

ЦвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π°

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π’ Ρ„Π°ΠΉΠ»Π΅ Π½Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния

НСт

НСт

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ

Π•ΡΡ‚ΡŒ

НСт

Truecolor-ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

НСт

НСт

ΠœΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

НСт

НСт

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ

Π•ΡΡ‚ΡŒ

Π•ΡΡ‚ΡŒ

Truecolor-ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

НСт

Π•ΡΡ‚ΡŒ

ΠœΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

НСт

Π•ΡΡ‚ΡŒ

ПолС CMapLength Ρ…Ρ€Π°Π½ΠΈΡ‚ свСдСния ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅ элСмСнтов Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 57 Ρ†Π²Π΅Ρ‚ΠΎΠ², Ρ‚ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это ΠΏΠΎΠ»Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ 57-ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

ПолС CMapDepth опрСдСляСт количСство Π±ΠΈΡ‚ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ элСмСнтС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ значСния 15, 16, 24 ΠΈΠ»ΠΈ 32.

ImageDesc — ОписаниС изобраТСния. НСсСт Π² ΡΠ΅Π±Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

7−6 Π±ΠΈΡ‚Ρ‹ — Ρ€Π΅Π·Π΅Ρ€Π², всСгда 0;

4−5 Π±ΠΈΡ‚Ρ‹ — ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π°Ρ‡Π°Π»Π° изобраТСния. Если ΠΎΠ±Π° Π±ΠΈΡ‚Π° Ρ€Π°Π²Π½Ρ‹ 0, Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ начинаСтся Π² Π»Π΅Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΠ³Π»Ρƒ;

0−3 Π±ΠΈΡ‚Ρ‹ — количСство Π±ΠΈΡ‚ΠΎΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² ΠΏΠΈΠΊΡΠ΅Π»Π΅ (Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π», ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΈ Π±ΠΈΡ‚Ρ‹ прСрывания).

1.1.3 ЦвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π°

Π€ΠΎΡ€ΠΌΠ°Ρ‚ TGA опрСдСляСт Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° хранСния Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния: pseudo-color (псСвдоцвСт), direct-color ΠΈ true-color.

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

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ direct-color ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ псСвдоцвСтным изобраТСниям, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π½ΠΈΡ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Π½Π°Π» (красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΈ ΡΠΈΠ½ΠΈΠΉ) записан ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния direct-color содСрТит Ρ‚Ρ€ΠΈ индСкса — ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ true-color хранят Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ пиксСля нСпосрСдствСнно Π² Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния, ΠΈ Π΄Π»Ρ ΠΈΡ… ΠΎΡ‚обраТСния цвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся.

ЦвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° присутствуСт Π² Ρ„Π°ΠΉΠ»Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅ ColorMapType Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° установлСно Π² 1. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 этого поля ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ цвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² ΡΡ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ отсутствуСт.

ЦвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² TGA-Ρ„Π°ΠΉΠ»Π΅ Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠ½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ TGA ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ цвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠΌΠ΅Π»Π° фиксированноС количСство элСмСнтов, основанноС Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Π΅ Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, 8-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ содСрТит 256-ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π΄Π°ΠΆΠ΅ Ссли для Π΅Π³ΠΎ рСпродуцирования трСбуСтся всСго 4 Ρ†Π²Π΅Ρ‚Π°. А Π²ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ TGA Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ количСство элСмСнтов Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ пиксСльной Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹, поэтому ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, содСрТащСС 57 Ρ†Π²Π΅Ρ‚ΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· 57 элСмСнтов. Π”Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅ элСмСнтов Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ содСрТатся Π² ΠΏΠΎΠ»Π΅ Π‘ΠœΠ°Ρ€Length Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π° TGA.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² Π±ΠΈΡ‚Π°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ записываСтся Π² ΠΏΠΎΠ»Π΅ CMapDepth Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π°. ПиксСльная Π³Π»ΡƒΠ±ΠΈΠ½Π° Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния Π½Π΅ Π²ΡΠ΅Π³Π΄Π° соотвСтствуСт Π³Π»ΡƒΠ±ΠΈΠ½Π΅ элСмСнта Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Для 24-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ цвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ· 256 элСмСнтов, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ 24 Π±ΠΈΡ‚Π°, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ пиксСли Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ всСго Π² 8 Π±ΠΈΡ‚ΠΎΠ². Π­Ρ‚ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ Π²ΠΏΠΎΠ»Π½Π΅ достаточно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 256 элСмСнтов. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ TGA-ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ· 4096 элСмСнтов с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта 8 Π±ΠΈΡ‚ΠΎΠ². Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС минимальная пиксСльная Π³Π»ΡƒΠ±ΠΈΠ½Π°, нСобходимая для индСксации элСмСнтов Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎΠΉ 12 Π±ΠΈΡ‚Π°ΠΌ, хотя 16-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ значСния Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ элСмСнта Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ всСгда Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π», ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΈΠ»ΠΈ Π±ΠΈΡ‚Ρ‹ прСрывания, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ.

1.1.4 Π”Π°Π½Π½Ρ‹Π΅ изобраТСния

Π”Π°Π½Π½Ρ‹Π΅ изобраТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ имССтся цвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ изобраТСния, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ послС Π½ΠΈΡ….

Π Π°Π·ΠΌΠ΅Ρ€ TGA-изобраТСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ 65 535 пиксСлями ΠΏΠΎ Π²Ρ‹ΡΠΎΡ‚Π΅ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ количСством пиксСлСй ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅.

Π”Π°Π½Π½Ρ‹Π΅ изобраТСния содСрТат (Width x Height) пиксСлСй. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль опрСдСляСт Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ²:

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ пиксСль);

красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, синий (16-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ пиксСль с ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹ΠΌ Π±ΠΈΡ‚ΠΎΠΌ (15-ΠΉ Π±ΠΈΡ‚));

красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, синий (24-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ пиксСль);

Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π», красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, синий (32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ пиксСль).

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² 8-, 16-, 24 — ΠΈΠ»ΠΈ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Однако 16-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA нСсколько слоТнСС. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля PixelDepth = 16 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎ 5 Π±ΠΈΡ‚ΠΎΠ² для прСдставлСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ (красной, Π·Π΅Π»Π΅Π½ΠΎΠΉ ΠΈ ΡΠΈΠ½Π΅ΠΉ), Π° ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚ содСрТит ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (см. Π½ΠΈΠΆΠ΅). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти 16 Π±ΠΈΡ‚ΠΎΠ² Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² 2 Π±Π°ΠΉΡ‚Π°Ρ…, Ρ‚ΠΎ Π΄Π»Ρ чтСния ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Ρ‚Π°ΠΊΠΈΡ… ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ произвСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдвиг ΠΈ ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΡ‚ΠΎΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² ΠΏΠΈΠΊΡΠ΅Π»Π΅ опрСдСляСтся значСниями Π±ΠΈΡ‚ΠΎΠ² 0−3 поля ImageDescriptor Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ ΡΠΎΠΎΡ‚вСтствуСт количСству Π±ΠΈΡ‚ΠΎΠ² Π² ΠΏΠΈΠΊΡΠ΅Π»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ‹ нСпосрСдствСнно с Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ.

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ TGA 16 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 15 ΠΈΠ· 16 Π±ΠΈΡ‚ΠΎΠ² пиксСля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для воспроизвСдСния Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ 16-ΠΉ Π±ΠΈΡ‚, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹ΠΌ, примСняСтся для задания прозрачности (пиксСль Π½Π΅ Π²ΠΈΠ΄Π΅Π½) ΠΈΠ»ΠΈ нСпрозрачности (пиксСль Π²ΠΈΠ΄Π΅Π½) пиксСля ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅.

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ TGA 32 пиксСль прСдставлСн 32 Π±ΠΈΡ‚Π°ΠΌΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ цвСтовая информация хранится Π² 24 Π±ΠΈΡ‚Π°Ρ…, Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ 8 Π±ΠΈΡ‚ΠΎΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ пиксСлС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»Π°.

ΠΠ»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π» — это условноС Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°ΡŽΡ‰Π΅Π΅ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ прозрачности ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ пиксСля. ЗначСния Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ изобраТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΠ»ΠΈ Π½Π° «ΠΆΠΈΠ²ΡƒΡŽ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ». Один ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½Ρ‹ΠΉ Π±ΠΈΡ‚ (ΠΊΠ°ΠΊ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ TGA 16) ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Π²ΠΈΠ΄ΠΈΠΌ пиксСль ΠΈΠ»ΠΈ Π½Π΅Ρ‚; восСмь Π±ΠΈΡ‚ΠΎΠ² точности ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ пиксСля Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ ΠΏΠΎΠ»Π½ΠΎΠΉ прозрачности (0) Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ нСпрозрачности (255).

Π”Π°Π½Π½Ρ‹Π΅ изобраТСния, записанныС Π² Ρ„Π°ΠΉΠ»Π΅ TGA, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ (Π½Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ся). По ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ„Π°ΠΉΠ»Ρ‹ TGA, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, вСсьма Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈ, особСнно Ссли растровыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ 24 ΠΈΠ»ΠΈ 32 Π±ΠΈΡ‚Π°. На ΡΡ‚ΠΎΡ‚ случай спСцификациСй TGA прСдусмотрСна простая, Π½ΠΎ ΡΡ„фСктивная схСма сТатия RLE. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ любого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сТато ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° RLE. Π’ ΡΠΆΠ°Ρ‚ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС сТатиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π—Π°ΠΆΠ°Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡΠ΅Ρ€ΠΈΡŽ Π³Ρ€ΡƒΠΏΠΏ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит ΠΈΠ· ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ пиксСлСй. Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π±Π°ΠΉΡ‚Π° сообщаСт Ρ‚ΠΈΠΏ Π³Ρ€ΡƒΠΏΠΏΡ‹ — Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΈΠ»ΠΈ повторяСмая, Π° ΠΌΠ»Π°Π΄ΡˆΠΈΠ΅ 7 Π±ΠΈΡ‚ содСрТат Π΄Π»ΠΈΠ½Ρƒ Π³Ρ€ΡƒΠΏΠΏΡ‹. Π”Π»ΠΈΠ½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ Π½Π° 1 большС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±Π°ΠΉΡ‚Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 0h Π΄ΠΎ 7Fh ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π»ΠΈΠ½Π°ΠΌ ΠΎΡ‚ 1 Π΄ΠΎ 128 пиксСлСй. Если ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ — 1, Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠΏΠ° являСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅ΠΉΡΡ, Ρ‚. Π΅. имССтся 1 пиксСль, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ повторяСтся нСсколько Ρ€Π°Π·. Если ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ — 0, Π³Ρ€ΡƒΠΏΠΏΠ° — Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΈ Π² Π½Π΅ΠΉ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ пиксСлСй, сколько ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π΄Π»ΠΈΠ½Π΅. НапримСр, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π±Π°ΠΉΡ‚ 0Fh — Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠ°, ΠΈ Π·Π° ΡΡ‚ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ слСдуСт 16 пиксСлСй. Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π±Π°ΠΉΡ‚ 88h — ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π°ΡΡΡ Π³Ρ€ΡƒΠΏΠΏΠ°, ΠΈ Π·Π° ΡΡ‚ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ слСдуСт 1 пиксСль, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ повторяСтся Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ 9 Ρ€Π°Π·.

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

1.2 Π€ΠΎΡ€ΠΌΠ°Ρ‚ BMP

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° BMP (сокращСнно ΠΎΡ‚ BitMaP) — это «Ρ€ΠΎΠ΄Π½ΠΎΠΉ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ растровой Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ для Windows, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΎ соотвСтствуСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ Windows, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эта систСма Ρ…Ρ€Π°Π½ΠΈΡ‚ свои растровыС массивы. Для ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, прСдставлСнного Π² BMP-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ BMP, хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ RLE, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ run length encoding (ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ сСрий). Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ RLE ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ сТатиС растровой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… способов сТатия RLE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ допустимы для Ρ„Π°ΠΉΠ»ΠΎΠ² BMP-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.

Π’ Ρ„Π°ΠΉΠ»Π°Ρ… BMP информация ΠΎ Ρ†Π²Π΅Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСла кодируСтся 1, 4, 8, 16 ΠΈΠ»ΠΈ 24 Π±ΠΈΡ‚ (Π±ΠΈΡ‚/пиксСл). Числом Π±ΠΈΡ‚/пиксСл, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ прСдставлСния Ρ†Π²Π΅Ρ‚Π°, опрСдСляСтся максимальноС число Ρ†Π²Π΅Ρ‚ΠΎΠ² Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½Π΅ 1 Π±ΠΈΡ‚/пиксСл ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ всСго Π΄Π²Π° Ρ†Π²Π΅Ρ‚Π°, Π° ΠΏΡ€ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½Π΅ 24 Π±ΠΈΡ‚/пиксСл — Π±ΠΎΠ»Π΅Π΅ 16 ΠΌΠ»Π½. Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ².

Π€ΠΎΡ€ΠΌΠ°Ρ‚ собствСнно Π΄Π°Π½Π½Ρ‹Ρ… растрового массива Π² Ρ„Π°ΠΉΠ»Π΅ BMP зависит ΠΎΡ‚ Ρ‡ΠΈΡΠ»Π° Π±ΠΈΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для кодирования Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Ρ†Π²Π΅Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСла. ΠŸΡ€ΠΈ 256-Ρ†Π²Π΅Ρ‚Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСл Π² Ρ‚ΠΎΠΉ части Ρ„Π°ΠΉΠ»Π°, Π³Π΄Π΅ содСрТатся собствСнно Π΄Π°Π½Π½Ρ‹Π΅ растрового массива, описываСтся ΠΎΠ΄Π½ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ (8 Π±ΠΈΡ‚). Π­Ρ‚ΠΎ описаниС пиксСла Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚авляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ² RGB, Π° ΡΠ»ΡƒΠΆΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ для Π²Ρ…ΠΎΠ΄Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ значСния Ρ†Π²Π΅Ρ‚Π° RGB Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π° BMP хранится R/G/B=255/0/0, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ пиксСла 0 Π² Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΠΎΠΌ массивС Π±ΡƒΠ΄Π΅Ρ‚ поставлСн Π² ΡΠΎΠΎΡ‚вСтствиС ярко-красный Ρ†Π²Π΅Ρ‚. ЗначСния пиксСлов хранятся Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ ΠΈΡ… Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, начиная (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ) с Π½ΠΈΠΆΠ½Π΅ΠΉ строки изобраТСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² 256-Ρ†Π²Π΅Ρ‚Π½ΠΎΠΌ BMP-Ρ„Π°ΠΉΠ»Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… растрового массива прСдставляСт собой индСкс для Ρ†Π²Π΅Ρ‚Π° пиксСла, находящСгося Π² Π½ΠΈΠΆΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ изобраТСния; Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ прСдставляСт индСкс для Ρ†Π²Π΅Ρ‚Π° сосСднСго справа пиксСла ΠΈ Ρ‚. Π΄. Если число Π±Π°ΠΉΡ‚ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎ, Ρ‚ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС добавляСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ€ΠΎΠ²Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ растрового массива ΠΏΠΎ 16-Π±ΠΈΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌ.

НС Π²ΡΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ BMP ΠΈΠΌΠ΅ΡŽΡ‚ структуру ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ структуру. НапримСр, Ρ„Π°ΠΉΠ»Ρ‹ BMP с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ 16 ΠΈ 24 Π±ΠΈΡ‚/пиксСл Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°Π±Π»ΠΈΡ† Ρ†Π²Π΅Ρ‚ΠΎΠ²; Π² ΡΡ‚ΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… значСния пиксСлов растрового массива нСпосрСдствСнно Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ значСния Ρ†Π²Π΅Ρ‚ΠΎΠ² RGB. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ хранСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Ρ„Π°ΠΉΠ»Π°. НапримСр, информация растрового массива Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… 16 ΠΈ 256-Ρ†Π²Π΅Ρ‚Π½Ρ‹Ρ… BMP-Ρ„Π°ΠΉΠ»Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ посрСдством Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° RLE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ замСняСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… пиксСлов изобраТСния Π½Π° Π»Π΅ΠΊΡΠ΅ΠΌΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ число пиксСлов Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΈΡ… Ρ†Π²Π΅Ρ‚. Π’ Windows допускаСтся Ρ€Π°Π±ΠΎΡ‚Π° с BMP-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ стиля OS/2, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° растрового массива ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ².

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ элСмСнтами Ρ„Π°ΠΉΠ»Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

— Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ;

— ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° (Ссли Π½ΡƒΠΆΠ½Π°);

— ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

1.2.1 Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ BMP

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° BITMAPFILEHEADER, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для объявлСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° растрового Ρ„Π°ΠΉΠ»Π° bmfHeader, ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

Рисунок 1.1 — Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° BITMAPFILEHEADER

ПолС bfType Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ASCII-символы Π’ ΠΈ М, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, разумССтся, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ bitmap. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ значСния Ρ€Π°Π²Π½Ρ‹ 0×42 ΠΈ 0x4D. ΠŸΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… значСниях этого поля Ρ„Π°ΠΉΠ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒΡΡ Windows ΠΊΠ°ΠΊ растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. CΠ»ΠΎΠ²ΠΎ Ρ‚ΠΈΠΏΠ° WORD размСщаСтся Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, начиная с ΠΌΠ»Π°Π΄ΡˆΠ΅Π³ΠΎ Π±Π°ΠΉΡ‚Π°, поэтому, формируя Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ инструкция Π²ΠΈΠ΄Π° bfType = 0x4d42.

ПолС bfSize содСрТит Ρ€Π°Π·ΠΌΠ΅Ρ€ всСго Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ….

ПолС bfOffbits Π·Π°Π΄Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ смСщСниС Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° растрового изобраТСния. Если BMP-Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ bfOffbits позволяСт Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ адрСс Π½Π°Ρ‡Π°Π»Π° массива aBitmapBits.

1.2.2 Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°

ПослС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° растрового Ρ„Π°ΠΉΠ»Π° слСдуСт Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° bmi Header,

Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится информация ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ растра.

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ структура BITMAPINFOHEADER ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ„Π°ΠΉΠ»Π΅ wingdi. h:

Рисунок 1.2 — Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°

Поля biWidth ΠΈ biHeight ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π²Ρ‹ΡΠΎΡ‚Ρƒ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния.

Высота biHeight ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ. Π—Π½Π°ΠΊ этого поля опрСдСляСт порядок слСдования строк Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ пиксСлов. ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ соотвСтствуСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ порядку строк (снизу Π²Π²Π΅Ρ€Ρ…), ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ пиксСл массива являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ пиксСлом послСднСй строки Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ изобраТСния. Π’Π°ΠΊΠΈΠ΅ DIB-растры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌΠΈ (bottom-up). ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ соотвСтствуСт прямому порядку строк (свСрху Π²Π½ΠΈΠ·), ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ DIB-растры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌΠΈ (top-down). Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ BMP-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ порядок слСдования строк Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ. ПолС bi Planes Π·Π°Π΄Π°Π΅Ρ‚ количСство Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… плоскостСй для Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ графичСского устройства. Π’ Ρ€Π°Π·Π½Ρ‹Ρ… устройствах ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ различная структура строк Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ (с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСсколькими Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ плоскостями).

Π€ΠΎΡ€ΠΌΠ°Ρ‚ DIB ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ изобраТСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒΡŽ, поэтому ΠΏΠΎΠ»Π΅ biPlanes Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ПолС biBitCount содСрТит количСство Π±ΠΈΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для кодирования Ρ†Π²Π΅Ρ‚Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ пиксСла. Иногда эту характСристику Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ.

1.2.3 ΠŸΠ°Π»ΠΈΡ‚Ρ€Π° BMP

ЦвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° являСтся массивом структур Ρ‚ΠΈΠΏΠ° RGBQUAD. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Рисунок 1.3 — Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° RGBQUAD

Поля структуры Π·Π°Π΄Π°ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ для синСй, Π·Π΅Π»Π΅Π½ΠΎΠΉ ΠΈ ΠΊΡ€Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ†Π²Π΅Ρ‚Π° пиксСла. ПослСднСС ΠΏΠΎΠ»Π΅ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ являСтся Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΌ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ цвСтовая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² DIB-растрах, содСрТащих Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 256 Ρ†Π²Π΅Ρ‚ΠΎΠ². Π’ ΡΡ‚ΠΎΠΌ случаС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСл массива aBitmapBits содСрТит индСкс Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Иногда Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈ Π² DIB-растры Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° True Color (Hi Color), Ρ‡Ρ‚ΠΎ, Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, каТСтся ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ. Но ΡΡ‚ΠΎ позволяСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ растры с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΌ качСством ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ² Π½Π° ΡƒΡΡ‚ройствах, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ True Color, Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ задаСтся Π² ΠΏΠΎΠ»Π΅ biCLrUsed Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. Если это ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся максимальноС количСство элСмСнтов для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹.

1.2.4 Π”Π°Π½Π½Ρ‹Π΅ изобраТСния BMP

ΠŸΠΈΠΊΡΠ΅Π»Ρ‹ изобраТСния хранятся Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ пиксСлов aBitmapBits. Если ΠΏΠΎΠ»Π΅ biHeight Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° содСрТит ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΡΡ‚Ρ€ΠΎΠΊΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ хранятся Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС, Ссли ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ — Ρ‚ΠΎ Π² ΠΏΡ€ΡΠΌΠΎΠΌ порядкС.

ΠŸΠΈΠΊΡΠ΅Π»Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ строки Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ для экономии мСста.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π±ΠΈΡ‚Π°ΠΌΠΈ Π΄ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚ΠΎΠ² Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ вычисляСтся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

bytesPertine = ((width * MtCount + 31) / 32) * 4:

Π³Π΄Π΅ width — ΡˆΠΈΡ€ΠΈΠ½Π° изобраТСния Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…, a bitCount — количСство Π±ΠΈΡ‚ Π½Π° ΠΏΠΈΠΊΡΠ΅Π».

Для нСсТатых растров DIB, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅ biCompression ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ BI_RGB, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ пиксСлам массива являСтся простой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, которая рСализуСтся достаточно эффСктивно. Массив пиксСлов aBitmapBits ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π»ΠΎ Π±Ρ‹ сСмантику хранСния Π² Π½Π΅ΠΌ строк Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ изобраТСния. Однако основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ отобраТСния DIB Π² ΠΊΠΎΠ½Ρ‚СкстС устройства ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° адрСс ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡƒΠ΄ΠΎΠ±Π½Π΅ΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ aBitmapBits ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Π° ΠΏΡ€ΡΠΌΠΎΠΉ доступ ΠΊ ΠΏΠΈΠΊΡΠ΅Π»Π°ΠΌ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ посрСдством прСобразования ΠΏΠ°Ρ€Ρ‹ индСксов «Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠ³ΠΎ» Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½Ρ‹ΠΉ индСкс «Ρ„изичСского» ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

2 ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° отобраТСния Ρ„Π°ΠΉΠ»Π°

2.1 ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° TGAΠ‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA прСдставлСно Π½Π° Ρ€ΠΈΡ. 2.1

Рисунок 2.1 — Π‘Ρ…Π΅ΠΌΠ° открытия Ρ„Π°ΠΉΠ»Π°.

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.2 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ открытия Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA. Рассмотрим Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

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

Π”Π°Π»Π΅Π΅ считываСтся Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (см. 1.1.2) ΠΈΠ· Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Рисунок 2.2 — Алгоритм открытия Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA.

ПослС этого опрСдСляСтся Ρ‚ΠΈΠΏ изобраТСния, содСрТащСгося Π² Ρ„Π°ΠΉΠ»Π΅. Если это ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ систСмой, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅ Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ сообщСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (см. 1.1.3) значСния Π΅Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈ Π΄Π°Π»Π΅Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния (см. 1.1.4), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой 8-ΠΌΠΈ Π±ΠΈΡ‚Π½Ρ‹Π΅ индСксы Ρ†Π²Π΅Ρ‚ΠΎΠ² Π² ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅.

Если Π² Ρ„Π°ΠΉΠ»Π΅ отсутствуСт ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния, содСрТащих Π² ΡΠ΅Π±Π΅ Ρ†Π²Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля.

ПослС получСния всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для отобраТСния изобраТСния Ρ„Π°ΠΉΠ» закрываСтся.

2.2 ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° BMP

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ BMP Ρ„Π°ΠΉΠ»Π° осущСствляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ LoadFromFile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ BMP-Ρ„Π°ΠΉΠ» с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, считывая Π΅Π³ΠΎ с Π΄ΠΈΡΠΊΠ° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сначала читаСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ растрового Ρ„Π°ΠΉΠ»Π°, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΠΈ с Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ указываСтся Π² ΠΏΠΎΠ»Π΅ infoHeadSize.

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

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.3 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ чтСния BMP Ρ„Π°ΠΉΠ»Π°.

2.3 ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ изобраТСния

Алгоритм отобраТСния изобраТСния прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅

Рисунок 2.3 — Алгоритм чтСния BMP Ρ„Π°ΠΉΠ»Π°

Рисунок 2.4 — Алгоритм ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

3. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ эффСктов

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

3.1 Π—Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ B

Алгоритм Π·Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΡ изобраТСния ΠΏΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ B ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.1.

Рисунок 3.1 — Алгоритм Π·Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΡ изобраТСния ΠΏΠΎ B

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡˆΡƒΠΌΠΈΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ B Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ссли Π² Ρ„Π°ΠΉΠ»Π΅ Π΅ΡΡ‚ΡŒ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°, Ρ‚ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ†Π²Π΅Ρ‚Ρƒ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° B ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡˆΡƒΠΌ.

Если Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π΅Ρ‚ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° RGB, ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ B Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡˆΡƒΠΌ, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ пиксСль Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Ссли ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ B Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ допустимого Π΅Π³ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ для значСния пиксСля Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

3.2 Π—Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ S

Алгоритм Π·Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΡ изобраТСния ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ S ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.2.

Рисунок 3.2 — Алгоритм Π·Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΡ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ S.

Π”Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ хранятся Π² Π±Π°Π·ΠΈΡΠ΅ RGB ΠΈ Π΄Π»Ρ Π·Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΡ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ S Π±Π°Π·ΠΈΡΠ° HLS Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля ΠΈΠ· Π±Π°Π·ΠΈΡΠ° RGB Π² Π±Π°Π·ΠΈΡ HLS, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСт ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° RGB_to_HLS. Π”Π°Π»Π΅Π΅ трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°ΡˆΡƒΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ S, ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½Π΅ΠΉ ΡˆΡƒΠΌΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ базиса Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, выполняСмоС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ HLS_to_RGB.

HLS (Hue, Lightness, Saturation — Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΠ½, свСтлота, Π½Π°ΡΡ‹Ρ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ) — модСль ориСнтированная Π½Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ явного задания Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ° Ρ†Π²Π΅Ρ‚Π° (рис. 3.3). Π­Ρ‚Π° модСль ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ подпространство, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ собой Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ конус, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ задаСтся Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ конуса ΠΈ ΡΠΎΠΎΡ‚вСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ L = 0, Π±Π΅Π»Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ максимальной интСнсивности задаСтся Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ конуса ΠΈ ΡΠΎΠΎΡ‚вСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ L = 1. Максимально интСнсивныС Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΎΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ основанию конусов с L = 0.5, Ρ‡Ρ‚ΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Рисунок 3.3 — ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ HLS

Π¦Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΠ½ H, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ систСмС HSV, задаСтся ΡƒΠ³Π»ΠΎΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°.

ΠΠ°ΡΡ‹Ρ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ S ΠΌΠ΅Π½ΡΠ΅Ρ‚ся Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚ 0 Π΄ΠΎ 1 ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ся расстояниСм ΠΎΡ‚ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ оси L Π΄ΠΎ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ повСрхности конуса. Π’. Π΅. максимально насыщСнныС Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ L=0.5, S=1.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, систСму HLS ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΈΠ· HSV «Π²Ρ‹Ρ‚ягиваниСм» Ρ‚ΠΎΡ‡ΠΊΠΈ V=1, S=0, Π·Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ Π±Π΅Π»Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚, Π²Π²Π΅Ρ€Ρ… для образования Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ конуса.

Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΈΠ· RGB Π² HLS:

Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΈΠ· HLS Π² RGB:

3.3 Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ изобраТСния

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ изобраТСния использовался Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ задаСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ 3×3. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° Ρ€ΠΈΡ. 3.4

Рисунок 3.4 — ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° 4

Рисунок 3.5 — Алгоритм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ изобраТСния.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ покрываСтся этой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ, Π² Ρ†ΠΈΠΊΠ»Π΅ попиксСльно. ΠŸΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ складываСтся с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ пиксСля. ΠŸΡ€ΠΈ Ρ‡Π΅ΠΌ, Ссли ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ 0.255, Ρ‚ΠΎ ΠΎΠ½Π° приравниваСтся ΠΊ Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠ΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ этого ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°.

Алгоритм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° прСдставлСн Π½Π° Ρ€ΠΈΡ. 3.5

4. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ичСскими Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ

4.1 Π’Ρ‹Π±ΠΎΡ€ срСдств для описания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС Π‘++, Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ программирования Microsoft Visual C++ 2005.

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

ИмСнно Ρ‚Π°ΠΊΠΈΠΌ инструмСнтом являСтся Microsoft Visual C++ 2005. ΠžΡΠ½Π°Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… мастСров (Wizard), Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, этот ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ позволяСт с ΡΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ сСкунды ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ работоспособноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Windows. Π’ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Π°Ρ Π² ΡΠΎΡΡ‚Π°Π² Microsoft Visual C++ 2005 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° классов Microsoft Foundation Classes (MFC) ΡƒΠΆΠ΅ стала фактичСски стандартом для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² компиляторов C++. Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ процСсс ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… мСню ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ Π² ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ созданныС Π² Microsoft Visual C++ 2005 просты Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Π½ΠΈΠΌΠΈ.

Π’ Π½Π°ΡΡ‚оящСС врСмя для Microsoft Visual C++ 2005 сущСствуСт большоС количСство Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ классов, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ².

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

4.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ 3 класса: KWnd, KDib, Tga. Класс KWnd, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ инкапсулируСтся ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ класса, созданиС ΠΎΠΊΠ½Π° ΠΈ ΠΏΠΎΠΊΠ°Π· Π΅Π³ΠΎ Π½Π° ΡΠΊΡ€Π°Π½Π΅. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ конструктора класса KWnd содСрТит 12 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° LRESULT. Π—Π΄Π΅ΡΡŒ обязатСлСн спСцификатор WINAPI ΠΈΠ»ΠΈ эквивалСнтный Π΅ΠΌΡƒ спСцификатор stdcall. Класс KDib ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠΌ BMP. РСализация класса ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 4.1.

Рисунок 4.1 — Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ класса KDib

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… для класса ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ конструктор ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, класс KDib содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, пСрСчислСнныС Π½ΠΈΠΆΠ΅:

1) ΠœΠ΅Ρ‚ΠΎΠ΄ CreateDib24 создаСт Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ 24-разрядный растр с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ ΠΈ Π²Ρ‹ΡΠΎΡ‚ΠΎΠΉ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ создания осущСствляСтся инициализация ΠΏΠΎΠ»Π΅ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° растрового Ρ„Π°ΠΉΠ»Π° ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. ПослС этого выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния массива пиксСлов. Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ открываСтся дисковый Ρ„Π°ΠΉΠ» с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для сохранСния Π² Π½Π΅ΠΌ создаваСмого растра.

2) ΠœΠ΅Ρ‚ΠΎΠ΄ SetPixel осущСствляСт прямой доступ ΠΊ ΠΏΠΈΠΊΡΠ΅Π»Π°ΠΌ Π² 24-разрядном растрС. ЦвСтовая информация для синСй, Π·Π΅Π»Π΅Π½ΠΎΠΉ ΠΈ ΠΊΡ€Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ†Π²Π΅Ρ‚Π° пиксСла записываСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты массива aBitmapBits. АдрСса элСмСнтов Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π½ΠΎΠΌΠ΅Ρ€ строки Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ Ρƒ ΠΈ Π½ΠΎΠΌΠ΅Ρ€ пиксСла Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ Ρ….

3) ΠœΠ΅Ρ‚ΠΎΠ΄ StoreDib24 сохраняСт созданный растр, записывая Π΅Π³ΠΎ Π½Π° Π΄ΠΈΡΠΊ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ BMP.

4) ΠœΠ΅Ρ‚ΠΎΠ΄ LoadFromFile Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ BMP-Ρ„Π°ΠΉΠ» с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, считывая Π΅Π³ΠΎ с Π΄ΠΈΡΠΊΠ° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сначала читаСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ растрового Ρ„Π°ΠΉΠ»Π°, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΠΈ с Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ указываСтся Π² ΠΏΠΎΠ»Π΅ infoHeadSize. Помимо этого Π² ΠΏΠΎΠ»Π΅ imageSize указываСтся вычислСнный Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния Π² Π±Π°ΠΉΡ‚Π°Ρ…. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² динамичСски выдСляСмой памяти ΠΏΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° plnfoHead ΠΈ ΠΏΠΎΠ΄ массив пиксСлов aBitmapBits. ПослС выдСлСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ памяти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ растра Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

5) ΠœΠ΅Ρ‚ΠΎΠ΄ Draw Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ растр Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ графичСского устройства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ StretchDIBits.

Класс Tga ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Tga. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… для класса ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ конструктор ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, класс Tga содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, пСрСчислСнныС Π½ΠΈΠΆΠ΅:

1) ΠœΠ΅Ρ‚ΠΎΠ΄ LoadFromFile Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Tga-Ρ„Π°ΠΉΠ» с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, считывая Π΅Π³ΠΎ с Π΄ΠΈΡΠΊΠ° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сначала читаСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π°. Помимо этого Π² ΠΏΠΎΠ»Π΅ imageSize указываСтся вычислСнный Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния Π² Π±Π°ΠΉΡ‚Π°Ρ…. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² динамичСски выдСляСмой памяти ΠΏΠΎΠ΄ массив пиксСлов aBitmapBits. ПослС выдСлСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ памяти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

2) ΠœΠ΅Ρ‚ΠΎΠ΄ Draw Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС Tga-Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ графичСского устройства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SetPixel.

3) ΠœΠ΅Ρ‚ΠΎΠ΄ RgbToHls ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π½Ρ‹Ρ‹Π΅ изобраТСния ΠΈΠ· RGB Π² HLS.

4) ΠœΠ΅Ρ‚ΠΎΠ΄ HlsToRgb ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния ΠΈΠ· HLS Π² RGB.

5) ΠœΠ΅Ρ‚ΠΎΠ΄ NoiseB Π·Π°ΡˆΡƒΠΌΠ»ΡΠ΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ B

6) ΠœΠ΅Ρ‚ΠΎΠ΄ NoiseS ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния ΠΈΠ· RGB Π² HLS, Π·Π°ΡˆΡƒΠΌΠ»ΡΠ΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ S ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· HLS Π² RGB.

7) ΠœΠ΅Ρ‚ΠΎΠ΄ Filter примСняСт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ «Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅» ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ.

4.3 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

KWnd. cpp — содСрТит основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ создания, рСгистрации ΠΈ ΠΏΠΎΠΊΠ°Π·Π° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния;

KDib. cpp — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, содСрТащий Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для открытия Ρ„Π°ΠΉΠ»ΠΎΠ², сохранСния, ΠΏΠΎΠΊΠ°Π·Π° Π½Π° ΡΠΊΡ€Π°Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TGA ΠΈ BMP. Π’ ΡΡ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ описаны Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов KDib ΠΈ Tga для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ;

TgaToBmp. cpp — содСрТит основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния ΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π’ Π½Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ классов KDib ΠΈ Tga;

Resource. h — Ρ„Π°ΠΉΠ» рСсурса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ прописано мСню ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ управлСния.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 4.2.

Рисунок 4.2 — Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

4.4 ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡΡ…

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 4.1 прСдставлСны поля класса KDib ΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’Π°Π±Π»ΠΈΡ†Π° 4.1 Поля класса KDib.

ПолС

Π’ΠΈΠΏ

НазначСниС

aBitmapBits

BYTE*

Массив пиксСлов

Width

INT

Π¨ΠΈΡ€ΠΈΠ½Π° изобраТСния

Height

INT

Высота изобраТСния

bytesPerLine

INT

Кол — Π²ΠΎ Π±Π°ΠΉΡ‚ Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ изобраТСния

fileHead

BITMAPFILEHEADER

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ растрового Ρ„Π°ΠΉΠ»Π°

infoHead

BITMAPFILEHEADER

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°

pInfoHead

BITMAPFILEHEADER*

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΈΠ½Ρ„ΠΎΠ±Π»ΠΎΠΊ

fileHeadSize

INT

Π Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°

infoHeadSize

INT

Π Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°

imageSize

INT

Π Π°Π·ΠΌΠ΅Ρ€ изобраТСния

Error

STRING

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅

outFile

Ofstream

Имя Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 4.2 прСдставлСны поля класса Tga ΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’Π°Π±Π»ΠΈΡ†Π° 4.2 Поля класса TGA.

ПолС

Π’ΠΈΠΏ

НазначСниС

aBitmapBits

BYTE*

Массив пиксСлов Π² RGB

aBitmapHLS

BYTE*

Массив пиксСлов Π² HLS

idlength

CHAR

Π”Π»ΠΈΠ½Π° тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ 18-Ρ‚ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для описания Ρ„Π°ΠΉΠ»Π°

colourmaptype

CHAR

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ наличия Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹

Datatypecode

CHAR

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… — Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ‚

Colourmaporigin

INT

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅

Colourmaplength

INT

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅

Colourmapdepth

CHAR

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅

X_origin

INT

Начало изобраТСния ΠΏΠΎ ΠΎΡΠΈ X

Y_origin

INT

Начало изобраТСния ΠΏΠΎ ΠΎΡΠΈ Y

Width

INT

Π¨ΠΈΡ€ΠΈΠ½Π° изобраТСния

Height

INT

Высота изобраТСния

Bitsperpixel

CHAR

Кол-Π²ΠΎ Π±ΠΈΡ‚ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡŒ — здСсь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 24 ΠΈΠ»ΠΈ 32

Imagedescriptor

CHAR

ОписаниС

imageSize

INT

Π Π°Π·ΠΌΠ΅Ρ€ изобраТСния

Error

STRING

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅

outFile

Ofstream

Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»

ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса KDib ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 4.3.

Π’Π°Π±Π»ΠΈΡ†Π° 4.3 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса KDib.

ΠœΠ΅Ρ‚ΠΎΠ΄

Π’ΠΈΠΏ

НазначСниС

CreateDib24

BOOL

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ BMP — Ρ„Π°ΠΉΠ»

StoreDib24

VOID

ΠŸΠ΅Ρ€Π΅ΡΡ‹Π»ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния

LoadFromFile

BOOL

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ BMP — Ρ„Π°ΠΉΠ»

SetPixel

VOID

УстанавливаСт пиксСль Π² ΠΊΠΎΠ½Ρ‚СкстС

Draw

INT

Π’Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ изобраТСния

GetWidth

INT

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ

GetHeight

INT

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ высоту

GetError

CHAR*

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ

ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Tga ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 4.4.

Π’Π°Π±Π»ΠΈΡ†Π° 4.4 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Tga.

ΠœΠ΅Ρ‚ΠΎΠ΄

Π’ΠΈΠΏ

НазначСниС

RgbToHls

VOID

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· RGB Π² HLS

HlsToRgb

VOID

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· HLS Π² RGB

LoadFromFile

BOOL

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ BMP — Ρ„Π°ΠΉΠ»

GetA

BYTE*

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив пиксСлов

Draw

INT

Π’Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ изобраТСния

GetWidth

INT

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ

GetHeight

INT

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ высоту

NoiseB

VOID

Π—Π°ΡˆΡƒΠΌΠ»ΡΠ΅Ρ‚ B

NoiseS

VOID

ЗащумляСт S

Filter

VOID

Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚

5. ВСстированиС, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму ΠΎΡ‚ Windows XP Π΄ΠΎ Windows VISTA. Для установки систСмы Π½Π΅Ρ‚ нСобходимости Π² ΠΎΡΠΎΠ±Ρ‹Ρ… настройках.

ВрСбования ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ — процСссор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° Pentium ΠΈΠ»ΠΈ Celeron с Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частотой Π½Π΅ Π½ΠΈΠΆΠ΅ 166 ΠœΠ“Ρ† (рСкомСндуСтся Pentium III 800 ΠœΠ“Ρ†), ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти — 512 ΠœΠ±Π°ΠΉΡ‚ (рСкомСндуСтся 1024 ΠœΠ±Π°ΠΉΡ‚), достаточноС количСство свободного дискового пространства всСго 50 MΠ±.

ВСстированиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ NoiseS ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, прСдставлСно Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 5.1

Π’Π°Π±Π»ΠΈΡ†Π° 5.1 — ВСстированиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ NoiseS.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

БообщСния

S

Pixel

R

G

B

Pal [Pixel]

Pal [Pixel]

Pal [Pixel]

;

— 1

Ошибка.

Ошибка

Pal [Pixel]

Pal [Pixel]

Pal [Pixel]

Ошибка

— 1

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ интСрфСйс, ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΉ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, сохранСниС Ρ„Π°ΠΉΠ»ΠΎΠ² графичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² TGA ΠΈ BMP, ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ спСцэффСкты.

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

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

Π‘Π°ΠΌΡ‹ΠΌ простым Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ оказался Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ BMP, СдинствСнным нСудобством этого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° являСтся сохранСниС строк Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ TGA, ΠΊΠ°ΠΊ ΠΈ BMP отличаСтся нСслоТной структурой ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Из ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π²ΠΈΠ΄ΠΎΠ² кодирования — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ RLE Π²Π²ΠΈΠ΄Ρƒ своСй простоты, обСспСчиваСт Π½Π΅ Π²ΡΠ΅Π³Π΄Π° эффСктивноС сТатиС изобраТСния.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ хранСния графичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π΅Π΅ ΡΠΆΠ°Ρ‚ия ΠΈ ΠΎΡ‚обраТСния.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘ Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ прилоТСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» для просмотра. Π’ ΠΎΠΊΠ½Π΅ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ осущСствляСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ ΠΈ Π²Ρ‹Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ². ПослС Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° происходит Π΅Π³ΠΎ автоматичСскоС распознаваниС ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π°. ПослС этого становятся доступными ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ мСню ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ€ΠΈΡ. Π‘.1

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ доступны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ TGA (Π€Π°ΠΉΠ» — > ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ TGA);

ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ BMP (Π€Π°ΠΉΠ» — > ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ BMP);

сохранСниС Ρ„Π°ΠΉΠ»Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ BMP (Π€Π°ΠΉΠ» — > Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ BMP);

ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° (Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹ — > ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ);

Π·Π°ΡˆΡƒΠΌΠΈΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ B (Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹ — >Π—Π°ΡˆΡƒΠΌΠΈΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ B);

Π·Π°ΡˆΡƒΠΌΠΈΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ S (Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹ — > Π—Π°ΡˆΡƒΠΌΠΈΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ S);

Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π€Π°ΠΉΠ» — > Π’Ρ‹Ρ…ΠΎΠ΄);

просмотр ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ изобраТСния TGA Ρ„Π°ΠΉΠ»Π° (ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€->TGA Ρ„Π°ΠΉΠ»);

просмотр ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ изобраТСния BMP Ρ„Π°ΠΉΠ»Π° (ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€->BMP Ρ„Π°ΠΉΠ»);

ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (Π‘ΠΏΡ€Π°Π²ΠΊΠ° — > О ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅)

Рисунок Π‘.1 — Π“Π»Π°Π²Π½ΠΎΠ΅ мСню ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Ρ‹Π²ΠΎΠ΄ изобраТСния осущСствляСтся Π² Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

#include

#include

#include

using namespace std;

class KDib {

public:

BYTE* aBitmapBits; // массив пиксСлов

KDib ();

~KDib ();

BOOL CreateDib24 (int w, int h, const char* fileName);

void StoreDib24 ();

BOOL LoadFromFile (const char* fileName);

void SetPixel (int x, int y, COLORREF color);

int Draw (HDC hdc, int xDst, int yDst, int wDst, int hDst,

int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop);

int GetWidth () { return width; }

int GetHeight () { return height; }

const char* GetError () { return error. c_str (); }

private:

int width;

int height;

int bytesPerLine;

BITMAPFILEHEADER fileHead; // Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ растрового Ρ„Π°ΠΉΠ»Π°

BITMAPINFOHEADER infoHead; // Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°

BITMAPINFOHEADER* pInfoHead;

int fileHeadSize;

int infoHeadSize;

int imageSize;

string error;

ofstream outFile;

};

class Tga {

private:

char idlength;

char colourmaptype;

char datatypecode;

short int colourmaporigin;

short int colourmaplength;

char colourmapdepth;

short int x_origin;

short int y_origin;

short width;

short height;

char bitsperpixel;

char imagedescriptor;

int imageSize;

string error;

ofstream outFile;

public:

BYTE* aBitmapBits; // массив пиксСлов

BYTE* aBitmapHLS; // массив пиксСлов

Tga ();

~Tga ();

int GetWidth () { return width; }

int GetHeight () { return height; }

BOOL LoadFromFile (char* fileName);

void Draw (HDC hdc, BYTE* aBitmapBits);

void RgbToHls ();

void HlsToRgb ();

void NoiseB ();

void NoiseS ();

void Filter ();

void TransformPix (int x, int y);

BYTE* GetA ();

};

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// KWnd. h

#include

class KWnd {

public:

KWnd (LPCTSTR windowName, HINSTANCE hInst, int cmdShow,

LRESULT (WINAPI *pWndProc) (HWND, UINT, WPARAM, LPARAM),

LPCTSTR menuName = NULL,

int x = CW_USEDEFAULT, int y = 0, int width = CW_USEDEFAULT, int height = 0, UINT classStyle = CS_HREDRAW | CS_VREDRAW,

DWORD windowStyle = WS_OVERLAPPEDWINDOW,

HWND hParent = NULL);

HWND GetHWnd () { return hWnd; }

protected:

HWND hWnd;

WNDCLASSEX wc;

};

// {{NO_DEPENDENCIES}}

// Microsoft Visual C++ generated include file.

// Used by TgaToBmp1. rc

#define IDR_MENU1 101

#define ID_40 001 40 001

#define ID_40 002 40 002

#define ID_40 003 40 003

#define ID_40 004 40 004

#define ID_40 005 40 005

#define ID_40 006 40 006

#define ID_40 007 40 007

#define ID_40 008 40 008

#define ID_40 009 40 009

#define ID_40 010 40 010

#define ID_40 011 40 011

#define ID_40 012 40 012

// Next default values for new objects

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 102

#define _APS_NEXT_COMMAND_VALUE 40 013

#define _APS_NEXT_CONTROL_VALUE 1001

#define _APS_NEXT_SYMED_VALUE 101

#endif

#endif

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// KWnd. cpp

#include «KWnd. h»

#include «resource1. h»

KWnd: KWnd (LPCTSTR windowName, HINSTANCE hInst, int cmdShow,

LRESULT (WINAPI *pWndProc) (HWND, UINT, WPARAM, LPARAM),

LPCTSTR menuName, int x, int y, int width, int height,

UINT classStyle, DWORD windowStyle, HWND hParent)

{

char szClassName [] = «KWndClass» ;

wc. cbSize = sizeof (wc);

wc. style = classStyle;

wc. lpfnWndProc = pWndProc;

wc. cbClsExtra = 0;

wc. cbWndExtra = 0;

wc. hInstance = hInst;

wc. hIcon = LoadIcon (NULL, IDI_APPLICATION);

wc. hCursor = LoadCursor (NULL, IDC_ARROW);

wc. hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

wc. lpszMenuName = MAKEINTRESOURCE (IDR_MENU1); // menuName;

wc. lpszClassName = szClassName;

wc. hIconSm = LoadIcon (NULL, IDI_APPLICATION);

// РСгистрируСм класс ΠΎΠΊΠ½Π°

if (! RegisterClassEx (&wc)) {

char msg = «Cannot register class: «;

strcat (msg, szClassName);

MessageBox (NULL, msg, «Error», MB_OK);

return;

}

width=640; height=480;

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ

hWnd = CreateWindow (szClassName, windowName, windowStyle,

x, y, width, height, hParent, (HMENU) NULL, hInst, NULL);

if (! hWnd) {

char text = «Cannot create window: «;

strcat (text, windowName);

MessageBox (NULL, text, «Error», MB_OK);

return;

}

// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ

ShowWindow (hWnd, cmdShow);

}

// KDib. cpp

#include «KDib. h»

#include

KDib: KDib () {

fileHeadSize = sizeof (BITMAPFILEHEADER);

fileHead. bfType = 0x4d42;

aBitmapBits = NULL;

}

KDib: ~KDib () {

if (pInfoHead) delete [] pInfoHead;

if (aBitmapBits) delete [] aBitmapBits;

if (outFile) outFile. close ();

}

BOOL KDib: CreateDib24 (int w, int h, const char* fileName) ios: trunc);

if (! outFile) return FALSE;

else return TRUE;

BOOL KDib: LoadFromFile (const char* fileName) {

ifstream inpFile;

inpFile. open (fileName, ios: in | ios: binary);

if (! inpFile) {

error = «ΠΠ΅Π²Π΅Ρ€Π½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. «;

return FALSE;

}

inpFile. read ((char*) &fileHead, fileHeadSize);

if (fileHead. bfType! = 0x4d42) {

error = «Π­Ρ‚ΠΎ Π½Π΅ BMP-Ρ„Π°ΠΉΠ»» ;

return FALSE;

}

infoHeadSize = fileHead. bfOffBits — fileHeadSize;

int fileSize = fileHead. bfSize;

imageSize = fileSize — (fileHeadSize + infoHeadSize);

pInfoHead = (BITMAPINFOHEADER*) (new BYTE [infoHeadSize]);

inpFile. read ((char*) pInfoHead, infoHeadSize);

width =pInfoHead->biWidth;

height = pInfoHead->biHeight;

aBitmapBits = new BYTE [imageSize];

inpFile. read ((char*) aBitmapBits, imageSize);

return true;

}

int KDib: Draw (HDC hdc, int xDst, int yDst, int wDst, int hDst,

int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop) {

return StretchDIBits (hdc, xDst, yDst, wDst, hDst, xSrc, ySrc, wSrc, hSrc,

aBitmapBits, (CONST BITMAPINFO*) pInfoHead, DIB_RGB_COLORS, rop);

}

void KDib: SetPixel (int x, int y, COLORREF color) {

int row = y;

int col = 3 * x;

aBitmapBits [row*bytesPerLine + col] = GetBValue (color);

aBitmapBits [row*bytesPerLine + col+1] = GetGValue (color);

aBitmapBits [row*bytesPerLine + col+2] = GetRValue (color);

}

void KDib: StoreDib24 () {

// Π—Π°ΠΏΠΈΡΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° BMP-Ρ„Π°ΠΉΠ»Π°

outFile. write ((char*) &fileHead, fileHeadSize);

outFile. write ((char*) &infoHead, infoHeadSize);

// Π—Π°ΠΏΠΈΡΡŒ массива пиксСлСй

outFile. write ((char*) aBitmapBits, imageSize);

}

Tga: Tga () {

aBitmapBits = NULL;

idlength='0';

colourmaptype='0';

datatypecode='0';

colourmaporigin=0;

colourmaplength=0;

colourmapdepth='0';

x_origin=0;

y_origin=0;

width=0;

height=0;

bitsperpixel='0';

imagedescriptor='0';

imageSize=0;

}

Tga: ~Tga () {}

BOOL Tga: LoadFromFile (char* fileName) {

ifstream inpFile;

inpFile. open (fileName, ios: in | ios: binary);

if (! inpFile) {

error = «ΠΠ΅Π²Π΅Ρ€Π½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. «;

return FALSE;

}

inpFile. read ((char*) &idlength, 1);

inpFile. read ((char*) &colourmaptype, 1);

inpFile. read ((char*) &datatypecode, 1);

inpFile. read ((char*) &colourmaporigin, 2);

inpFile. read ((char*) &colourmaplength, 2);

inpFile. read ((char*) &colourmapdepth, 1);

inpFile. read ((char*) &x_origin, 2);

inpFile. read ((char*) &y_origin, 2);

inpFile. read ((char*) &width, 2);

inpFile. read ((char*) &height, 2);

inpFile. read ((char*) &bitsperpixel, 1);

inpFile. read ((char*) &imagedescriptor, 1);

imageSize = width * height*3;

aBitmapBits = new BYTE [imageSize];

inpFile. read ((char*) aBitmapBits, imageSize);

inpFile. close ();

return true;

}

void Tga: Draw (HDC hdc, BYTE* aBitmapBits) {

int x = GetWidth ();

int y = GetHeight ();

int bytesPerLine = ((x * 24 + 31) / 32) * 4;

for (int row = 0; row < y; row++)

for (int col = 0; col < x; col++) {

SetPixel (hdc, col, row, RGB (aBitmapBits [row*bytesPerLine + col*3+2],

aBitmapBits [row*bytesPerLine + (col*3) +1],

aBitmapBits [row*bytesPerLine + (col*3)]));

}

}

BYTE* Tga: GetA () {

return aBitmapBits;

}

void Tga: RgbToHls () {

BYTE R, G, B, H, L, S;

int x = GetWidth ();

int y = GetHeight ();

int bytesPerLine = ((x * 24 + 31) / 32) * 4;

imageSize = x * y * 3;

aBitmapHLS = new BYTE [imageSize];

for (int row = 0; row < y; row++)

for (int col = 0; col < x; col++) {

R = aBitmapBits [row*bytesPerLine + col*3 + 2];

G = aBitmapBits [row*bytesPerLine + (col*3) + 1];

B = aBitmapBits [row*bytesPerLine + (col*3)];

S = (BYTE) sqrt ((double) (R*R + G*G + B*B — R*G — B*G — R*B));

L = (R + G + B) /3;

H = (BYTE) asin (sqrt (3.0/2.0) * (G — R) / S);

aBitmapHLS [row*bytesPerLine + (col*3)] = S;

aBitmapHLS [row*bytesPerLine + (col*3) + 1] = L;

aBitmapHLS [row*bytesPerLine + col*3 + 2] = H;

}

}

void Tga: HlsToRgb () {

BYTE R, G, B, H, L, S;

int x = GetWidth ();

int y = GetHeight ();

int bytesPerLine = ((x * 24 + 31) / 32) * 4;

for (int row = 0; row < y; row++)

for (int col = 0; col < x; col++) {

H = aBitmapHLS [row*bytesPerLine + col*3 + 2];

L = aBitmapHLS [row*bytesPerLine + (col*3) + 1];

S = aBitmapHLS [row*bytesPerLine + (col*3)];

R = L — (1/3) *S*cos ((double) H) — (1/sqrt (3.0)) *S*sin ((double) H);

G = L + (2/3) *S*cos ((double) H);

B = L — (1/3) *S*cos ((double) H) + (1/sqrt (3.0)) *S*sin ((double) H);

aBitmapBits [row*bytesPerLine + (col*3)] = B;

aBitmapBits [row*bytesPerLine + (col*3) + 1] = G;

aBitmapBits [row*bytesPerLine + col*3 + 2] = R;

}

}

void Tga: NoiseB () {

BYTE B;

int x = GetWidth ();

int y = GetHeight ();

int bytesPerLine = ((x * 24 + 31) / 32) * 4;

for (int row = 0; row < y; row++)

for (int col = 0; col < x; col++) {

B = aBitmapBits [row*bytesPerLine + (col*3)];

B+=rand ();

if (B < 0) B = 0;

if (B > 255) B = 255;

aBitmapBits [row*bytesPerLine + (col*3)] = B;

}

}

void Tga: NoiseS () {

BYTE S;

int x = GetWidth ();

int y = GetHeight ();

int bytesPerLine = ((x * 24 + 31) / 32) * 4;

for (int row = 0; row < y; row++)

for (int col = 0; col < x; col++) {

S = aBitmapHLS [row*bytesPerLine + (col*3)];

S+=rand ();

if (S < 0) S = 0;

if (S > 255) S = 255;

aBitmapHLS [row*bytesPerLine + (col*3)] = S;

}

}

void Tga: TransformPix (int x, int y) {

BYTE NewBGR [3];

int Pixel [3];

BYTE Pix [3];

int w = GetWidth ();

int h = GetHeight ();

int count = 9;

int Matrix ={1,1,1,1,1,1,1,1,1};

int bytesPerLine = ((w * 24 + 31) / 32) * 4;

// x y

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [y*bytesPerLine + x*3 + c];

Pixel [c] = NewBGR [c] * Matrix [4];

}

// x-1 y-1

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [ (y-1) *bytesPerLine + (x-1) *3 + c];

Pixel [c] += NewBGR [c] * Matrix [0];

}

// x y-1

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [y*bytesPerLine + (x-1) *3 + c];

Pixel [c] += NewBGR [c] * Matrix [1];

}

// x+1 y-1

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [ (y+1) *bytesPerLine + (x-1) *3 + c];

Pixel [c] += NewBGR [c] * Matrix [2];

}

// x+1 y

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [ (y+1) *bytesPerLine + x*3 + c];

Pixel [c] += NewBGR [c] * Matrix [5];

}

// x+1 y+1

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [ (y+1) *bytesPerLine + (x+1) *3 + c];

Pixel [c] += NewBGR [c] * Matrix [8];

}

// x y+1

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [y*bytesPerLine + (x+1) *3 + c];

Pixel [c] += NewBGR [c] * Matrix [7];

}

// x-1 y+1

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [ (y-1) *bytesPerLine + (x+1) *3 + c];

Pixel [c] += NewBGR [c] * Matrix [6];

}

// x-1 y

for (int c = 0; c < 3; c++) {

NewBGR [c] = aBitmapBits [ (y-1) *bytesPerLine + x*3 + c];

Pixel [c] += NewBGR [c] * Matrix [3];

}

for (int c = 0; c < 3; c++) {

if (count! =0)

Pixel [c] = Pixel [c] /count;

Pix [c] = BYTE (Pixel [c]);

if (Pix [c] < 0)

Pix [c] = 0;

else if (Pix [c] > 255)

Pix [c] =255;

aBitmapHLS [y*bytesPerLine + x*3 + c] = Pix [c];

}

}

void Tga: Filter () {

int w = GetWidth ();

int h = GetHeight ();

imageSize = w * h * 4;

aBitmapHLS = new BYTE [imageSize];

for (int y = 1; y < h-1; y++)

for (int x = 1; x < w-1; x++) {

TransformPix (x, y);

}

aBitmapBits = aBitmapHLS;

}

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// TgaToBmp. cpp

#include

#include

#include «KWnd. h»

#include «KDib. h»

#include «resource1. h»

KDib bmp;

Tga tga;

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

// ====================================================

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;

KWnd mainWnd («TgaToBmp», hInstance, nCmdShow, WndProc);

while (GetMessage (&msg, NULL, 0, 0)) {

TranslateMessage (&msg);

DispatchMessage (&msg);

}

return msg. wParam;

}

// ====================================================

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