Негизги мазмунга өтүү

Файл форматтары

BMP деген эмне? Bitmap форматы тууралуу түшүндүрмө

BMP Windows'тун кысылбаган, жоготуусуз растрдык форматы. Анын баш бөлүгүнүн түзүлүшүн, түс тереңдигин, чектөөлөрүн жана файлдарды кантип кичирейтүү керектигин түшүндүрөбүз.

Автор: Hemen Dönüştür Editör EkibiЖарыяланды: 7 мүн окуу

BMP файл форматы боюнча колдонмонун мукаба сүрөтү

BMP Windows дүйнөсүндөгү эң эски жана эң жөнөкөй сүрөт форматтарынын бири. BMP файлы адатта пикселдерди эч кандай кысуусуз дискке сап-сабы менен жазат. Ушул жөнөкөйлүк аны окууга оңой жана жоготуусуз кылат, жана ошол эле жөнөкөйлүк файлдарды эбегейсиз чоң кылат. Бул макалада BMP кайдан чыкканы, файлдын ичинде эмне бар экени, түс тереңдиги жана тунуктуктун деталдары, аны бүгүн кайда кездештирерибиз жана BMP файлдарын ыңгайлуураак форматтарга кантип конвертациялоо керектиги каралат.

BMP деген эмне?

BMP (bitmap, кеңейтүүсү .bmp) растрдык, пикселге негизделген сүрөт файл форматы. Техникалык документтерде ал DIB, башкача айтканда түзмөктөн көз карандысыз bitmap деп да аталат. «Түзмөктөн көз карандысыз» деген сүрөт кайсы графикалык карта же принтерде түзүлгөнүнө карабай бирдей чечмелениши мүмкүн дегенди билдирет: файл өз түстөрүн чечмелөө үчүн керектүү маалыматты өзүнүн баш бөлүгүндө жана түстөр таблицасында камтыйт.

Microsoft'тун Win32 документтерине ылайык, bitmap файлы BITMAPFILEHEADER түзүмү менен башталып, андан кийин BITMAPINFOHEADER, BITMAPV4HEADER же BITMAPV5HEADER, андан соң милдеттүү эмес түстөр таблицасы жана акырында пиксел маалыматы келет. MIME түрү image/bmp.

Кыскача тарых: Windows жана OS/2ден бүгүнкү күнгө чейин

BMP 1980-жылдардын аягында Microsoft менен IBM'дин Windows жана OS/2 боюнча биргелешкен ишинен чыккан. Windows 1.0 доорундагы bitmap'тер чыгаруу түзмөгүнө катуу көз каранды болгон; түзмөктөн көз карандысыз түрү 1990-жылы Windows 3.0 менен кеңири тараган. OS/2 Presentation Manager үчүн аныкталган 12 байттык BITMAPCOREHEADER «OS/2 BMP» файлдары тууралуу дагы эле айтылып жүргөнүнүн себеби.

Жылдар бою формат баш бөлүктүн аягына талаалар кошуу менен кеңейтилген. Library of Congress'тин формат сүрөттөмөсүнө ылайык, 5-версия 1998-жылы Windows 98 менен келип, файлга ICC түс профилдерин жазууга мүмкүндүк берген. Бүгүнкү кеңири таралган баш бөлүк өлчөмдөрү:

Баш бөлүкӨлчөмүНегизги кошумча
BITMAPCOREHEADER12 байтOS/2 1.x менен шайкеш негизги түзүлүш
BITMAPINFOHEADER40 байтWindows 3.0дон бери эң кеңири таралган баш бөлүк; кысуу жана чечилиш талаалары
BITMAPV4HEADER108 байтТүс маскалары, альфа маскасы жана түс мейкиндиги тууралуу маалымат
BITMAPV5HEADER124 байтКамтылган же шилтемеленген ICC профилдери, көрсөтүү ниети

Окуучу программалар кайсы баш бөлүк колдонулганын анын биринчи талаасындагы өлчөм маанисинен аныкташат. Бул эски программаларга жаңы талааларды эске албай, негизги маалыматты окуй берүүгө мүмкүндүк берет.

BMP файлдын ичинде

Файлдын баш бөлүгү жана «BM» кол тамгасы

Ар бир BMP файлы 14 байттык файл баш бөлүгү менен башталат, жана анын алгачкы эки байты ASCII'деги BM белгилери (он алтылыкта 42 4D). Баш бөлүк файлдын жалпы өлчөмүн жана пиксел маалыматы башталган байт аралыгын сактайт. Windows алмашуу буферине жайгаштырылган DIB (CF_DIB форматы) бул 14 байтты камтыбай, түз эле маалымат баш бөлүгүнөн башталат.

Маалымат баш бөлүгү

Маалымат баш бөлүгү туурасын, бийиктигин, пикселге бит санын (biBitCount), кысуу түрүн, туурасынан жана тигинен чечилишти (метрге пиксел менен) жана түстөр таблицасында колдонулган түстөрдүн санын сактайт.

Түстөр таблицасы (палитра)

Пикселге 8 бит же андан аз болгон сүрөттөрдө пиксел түс эмес, түстөр таблицасындагы индекс. Microsoft'тун документтериндеги мисалда 16 түстүү 32x32 bitmap'тин пиксел массиви 32 x 32 x 4 = 4096 бит, анткени 16 түскө кайрылуу үчүн 4 бит жетиштүү.

Пиксел маалыматы: төмөндөн өйдө саптар жана 4 байттык тегиздөө

BMP'нин эки адаттан тыш өзгөчөлүгү бар. Биринчиден, бийиктик оң сан болсо, саптар төмөндөн өйдө сакталат: файлдагы биринчи сап сүрөттүн эң төмөнкү сабы. Терс бийиктик саптарды жогорудан төмөн сактайт, бирок мындай сүрөттөрдү кысууга болбойт. Экинчиден, ар бир сап 4 байттын эселигине чейин толтурулат. Microsoft саптын узундугун (stride) мындайча берет:

stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride

24 биттик 1920x1080 сүрөт үчүн ар бир сап 1920 x 3 = 5 760 байт (4түн эселиги экени буга чейин эле), ошондуктан пиксел маалыматы 5 760 x 1 080 = 6 220 800 байт. 54 байттык баш бөлүктөр менен файл болжол менен 6,2 МБ болот. Ошол эле сүрөт JPG катары адатта мунун кичинекей бир бөлүгүн гана ээлейт.

Түс тереңдиги, кысуу жана тунуктук

BITMAPV5HEADER документтери пикселге 1, 4, 8, 16, 24 жана 32 битти аныктайт (0 мааниси тереңдик камтылган JPEG же PNG маалыматынан алынарын билдирет). 1 бит ак-кара, 4 бит 16 түс, 8 бит 256 түстүү палитра. 24 битте ар бир пиксел көк, жашыл, кызыл тартибиндеги үч байт.

Кысуу талаасы төмөнкү маанилерди ала алат:

  • BI_RGB: Кысылбаган. Практикада BMP файлдарынын басымдуу көпчүлүгү.
  • BI_RLE8 жана BI_RLE4: 8 биттик жана 4 биттик палитралык сүрөттөр үчүн жөнөкөй RLE (кайталоо узундугу боюнча) коддоо. Чоң тегиз аймактар үчүн пайдалуу, фотолор үчүн дээрлик пайдасыз.
  • BI_BITFIELDS: Кысуу эмес; маскалар 16 биттик жана 32 биттик пикселдерде кызыл, жашыл жана көк биттер кайда жайгашканын аныктайт (мисалы, RGB 565).
  • BI_JPEG жана BI_PNG: bitmap'тин ичинде JPEG же PNG маалыматына уруксат берет. Жалпы максаттагы көрүүчүлөр аны сейрек колдойт.

Тунуктук BMP'нин эң туруксуз тармагы. V4 жана V5 баш бөлүктөрүндөгү альфа маскасы 32 биттик пикселдин төртүнчү байтын тунук эместик катары аныктай алат, бирок классикалык 32 биттик BMP'де ал байт колдонулбайт деп сүрөттөлөт жана көптөгөн программалар аны эске албайт. Ошондуктан бир программада тунук көрүнгөн 32 биттик BMP'нин башкасында кара фондо турушу адаттан тыш көрүнүш эмес. Тунуктук керек болсо, PNG алда канча ишенимдүү тандоо.

Системалардагы, браузерлердеги жана программалардагы колдоо

BMP дээрлик бардык жерде ачылат. Windows'тун орнотулган көрүүчүлөрү жана Paint, macOS'тогу Preview жана кеңири таралган Linux көрүүчүлөрү аны окуйт. MDN'дин сүрөт форматтары боюнча колдонмосу BMP'нин Chrome, Edge, Firefox, Opera жана Safari'нин бардык версияларында колдоого алынарын көрсөтөт. Ошол эле колдонмо кысылбаган BMP файлдары PNG же JPG'ге салыштырмалуу өтө чоң экенин жана жалпысынан веб-сайт мазмуну үчүн андан качуу керектигин баса белгилейт.

BMP бүгүн кайда колдонулат?

  • Windows тиркемелеринин ресурстары жана эски программалар: Аспаптар тилкесинин сүрөттөрү, орнотуу чеберинин графикасы жана айрым оюн ресурстары дагы эле BMP.
  • Камтылган системалар жана микроконтроллерлер: Дисплейи бар түзмөккө JPEG декодери керек эмес; пиксел маалыматын түз эле экранга көчүрсө болот.
  • Өнөр жай камералары, сканерлер жана сыноо куралдары: Чийки, жоготуусуз натыйжа керек болгондо BMP жөнөкөй ортоңку формат.
  • Окутуу: Баш бөлүгү болгону бир нече ондогон байт болгондуктан, BMP көбүнчө сүрөт иштетүү курстарында студенттер биринчи окуп, жазган формат.

Күчтүү жана алсыз жактары

Күчтүү жактарыАлсыз жактары
Жоготуусуз; пиксел маанилери эч качан өзгөрбөйтКысылбаган, ошондуктан файлдар өтө чоң
Окуу жана жазуу абдан жөнөкөй, процессорго чыгым жокТунуктукту колдоо туруксуз
Дээрлик ар бир операциялык системада жана браузерде ачылатМетаберилиштерди (EXIF, сүрөттөмөлөр) колдоо алсыз
Палитра режимдери ресурсу аз түзмөктөргө ылайыктууВеб, e-mail жана жүктөө формалары үчүн ыңгайсыз

Көп кездешкен көйгөйлөр жана аларды чечүү

Файл e-mail же жүктөө формасы үчүн өтө чоң

Бул эң көп кездешкен маселе. Фотолор жана сканерленген сүрөттөр үчүн BMP'ни JPG'ге конвертациялоо адатта өлчөмдү он эсе же андан да көп кыскартат. Скриншоттор, диаграммалар же тексттүү нерселер үчүн BMP'ни PNG'ге конвертациялоо жакшыраак: PNG да жоготуусуз, бирок кысылган, жана JPG кескин четтердин айланасында жараткан ызы-чууну кошпойт.

32 биттик BMP кара фонду көрсөтөт

Программа альфа байтын тааныбайт же туура эмес окуйт. PNG'ге конвертациялоо адатта муну оңдойт. Тунуктугу жок JPG'ге конвертациялаганда тунук аймактар ак же өзүңүз тандаган түс менен толтурулат.

Сүрөт тескери же кыйшык

Өзүңүз жазган окуучу программада бул адатта эки катадан келип чыгат: саптар төмөндөн өйдө сакталарын эске албоо же ар бир саптын аягындагы толтуруу байттарын өткөрүп жибербөө. Жогорудагы stride формуласын колдонуу жана бийиктиктин белгисин текшерүү экөөнүн тең алдын алат.

Программа BMP'ни ачуудан баш тартат

RLE кысуусу, BI_BITFIELDS же камтылган JPEG/PNG маалыматы бар BMP файлдарын айрым жөнөкөй окуучу программалар колдобойт. Кысылбаган 24 биттик BMP катары кайра сактоо же PNG'ге конвертациялоо шайкештик көйгөйүн жоёт.

Конвертациялоо боюнча кеңештер

  • Фотолор үчүн JPG, графика үчүн PNG: BMP'ден чыкканда ушул кадимки эреже колдонулат. Веб үчүн сүрөт конвертеринде WebP же AVIF'ти да тандасаңыз болот.
  • Сапатты жогору кармаңыз: BMP жоготуусуз болгондуктан, 85-90% JPG сапаты түп нускадан айырмалоо кыйын болгон натыйжа берет.
  • Керек болсо кичирейтиңиз: Файл дагы эле чоң болсо, пиксел өлчөмдөрүн азайтыңыз же максаттуу өлчөмгө жетүү үчүн сүрөттү кысуу куралын колдонуңуз.
  • Тескери багытта: Камтылган түзмөк же эски программа BMP талап кылса, сүрөт конвертеринде максат катары BMP'ни тандаңыз. Биздин куралдар стандарттуу кысылбаган 24 биттик BMP жазат; тунук аймактар сиз тандаган фон түсүнө жайылтылат.

Биздин BMP конвертациялоо барактарыбыз браузериңизде иштейт: файл жүктөлбөйт жана түзмөгүңүздөн чыкпайт.

Көп берилүүчү суроолор

BMP менен DIB бир эле нерсеби?

Иш жүзүндө ооба. DIB Windows эстутумда жана алмашуу буферинде колдонгон түзмөктөн көз карандысыз bitmap түзүмү; BMP файлы болсо алдына 14 байттык файл баш бөлүгү кошулган ошол эле түзүм.

BMP жоготуусузбу?

Ооба. Кысылбаган жана RLE менен кысылган BMP файлдары пиксел маанилерин так сактайт. Жалгыз өзгөчө учур камтылган JPEG маалыматы бар сейрек BMP.

BMP'ни PNG'ге конвертациялаганда сапат жоголобу?

Жок. PNG да жоготуусуз; сүрөт бирдей бойдон калат жана кысылгандыктан гана кичирейет.

BMP'ни веб-сайтта колдонсо болобу?

Браузерлер BMP'ни көрсөтөт, бирок файлдар керексиз чоң жана барактарды жайлатат. Веб үчүн JPG, PNG, WebP же AVIF колдонуңуз.

BMP тунуктукту колдойбу?

32 биттик BMP теориялык жактан альфа каналды камтый алат, бирок программалар аны туруктуу колдобойт. Тунуктук керек болгон ар бир учурда PNG ишенимдүүрөөк тандоо.

Булактар

Тиешелүү конвертерлер

Бардык макалалар