Ang extension ng bmp file ay nagpapahiwatig na. Tingnan kung ano ang "BMP" sa iba pang mga diksyunaryo. Ang ideya ng isang algorithm ng pagtatago ng teksto

Anunsyo

Format ng file ng imahe ng BMP Raster

Ang BMP (bitmap file, device-independent bitmap file format) ay mga bitmap file na ginagamit upang mag-imbak ng mga digital bitmap na imahe nang hiwalay sa display device. Ang uri ng file na ito ay dating ginamit sa Microsoft Windows at OS/2. Ang terminong "raster" ay nagmula sa ideya ng mga programmer ng isang bitmap. Ang mga imahe ng BMP ay kadalasang hindi naka-compress o losslessly naka-compress (halimbawa, gamit ang ZIP o RAR - dahil sa pagkakaroon ng redundant na data sa file). Sa ngayon, ang JPG ay ang gustong format ng imahe - higit sa lahat dahil sa malaking sukat ng file ng BMP, na maaaring magdulot ng mga problema o pagkaantala kapag nagda-download, nagpapadala o nag-a-upload ng mga file.

Teknikal na impormasyon tungkol sa mga BMP file

Ang mga BMP file ay iniimbak bilang mga 2D na larawan ng iba't ibang laki, kulay, at lalim ng kulay nang walang data compression, mga profile ng kulay, o mga alpha channel. Ang mga BMP na larawan ay naka-save sa device-independent bitmap (DIB) na mga format, ibig sabihin, ang imahe ay may mga kulay sa halip na mga detalye ng system. Ipinapaliwanag nito kung bakit iba ang hitsura ng ilang BMP na imahe sa iba't ibang mga computer. Maaaring matingnan ang mga larawan ng BMP sa anumang device, kabilang ang mga screen ng computer at telebisyon. Dahil sa kakulangan ng mga patent, naging popular ang uri ng larawang ito para sa malawak na hanay ng mga device.

Karagdagang impormasyon tungkol sa BMP format

Ang isang maliit na programa ay isinasaalang-alang na inilipat ang sprite sa paligid ng screen, ngunit, sa kasamaang-palad, hindi ito mukhang tulad ng gusto namin. Sa artikulong ito ay susubukan naming "ayusin" ang sprite.

Nakuha namin ang imahe ng sprite mula sa isang Bmp file mula sa parehong mga file na maaari naming kunin ang larawan ng background, mouse cursor at mga elemento ng interface. Gayunpaman, ang nakikita namin sa screen ay hindi eksakto kung ano ang inaasahan namin: ang imahe ay naging baligtad at, bukod dito, may iba't ibang kulay kaysa sa kinakailangan. Kaya, alamin natin kung paano basahin nang tama ang mga Bmp file at iikot ang larawan "mula ulo hanggang paa."

Sa pamamagitan ng desisyon ng mga developer, ang Bmp file format ay hindi nakatali sa isang partikular na hardware platform. Ang file na ito ay binubuo ng apat na bahagi: isang header, isang header ng impormasyon, isang table ng kulay (palette), at data ng imahe. Kung ang file ay nag-iimbak ng isang imahe na may lalim na kulay na 24 bits (16 milyong mga kulay), kung gayon ang talahanayan ng kulay ay maaaring nawawala, ngunit sa aming 256-kulay na kaso naroroon ito. Ang istraktura ng bawat bahagi ng isang file na nag-iimbak ng 256-kulay na imahe ay ibinibigay sa , at ang mga kaukulang uri ng tala ay ibinibigay sa .

Ang header ng file ay nagsisimula sa mga lagda"BM" na sinusundan ng haba ng file, na ipinahayag sa mga byte. Ang susunod na 4 na byte ay nakalaan para sa karagdagang mga extension ng format, at nagtatapos ang header na ito displacement mula sa simula ng file hanggang sa data ng imahe na naitala dito. Sa 256 na kulay, ang offset na ito ay 1078 - ito ay eksakto kung magkano ang kailangan naming laktawan sa aming nakaraang programa upang makuha ang data.

Ang header ng impormasyon ay nagsisimula sa sarili nitong haba (maaaring mag-iba ito, ngunit para sa isang 256-kulay na file ito ay 40 bytes) at naglalaman ng mga sukat ng imahe, resolution, mga katangian ng pagtatanghal ng kulay at iba pang mga parameter.

Lapad at taas ng larawan ay tinukoy sa mga raster point at marahil ay hindi nangangailangan ng paliwanag.

Bilang ng mga eroplano maaaring gamitin sa mga file na may mababang lalim ng kulay. Kapag ang bilang ng mga kulay ay 256 o higit pa, ito ay palaging katumbas ng 1, kaya't ang field na ito ay maaari na ngayong ituring na hindi na ginagamit, ngunit para sa pagiging tugma ay pinananatili ito.

Lalim ng kulay ay itinuturing na pinakamahalagang katangian ng paraan kung paano kinakatawan ang kulay sa isang file at sinusukat sa mga bit bawat tuldok. Sa kasong ito, ito ay katumbas ng 8.

Compression. Karaniwang hindi ito ginagamit sa mga Bmp file, ngunit isang field sa header ang ibinigay para dito. Kadalasan ito ay 0, na nangangahulugang ang imahe ay hindi naka-compress. Sa hinaharap gagamitin lang namin ang mga ganoong file.

Laki ng Larawan- ang bilang ng mga byte ng memorya na kinakailangan upang maimbak ang larawang ito, hindi binibilang ang data ng palette.

Pahalang at patayong mga resolusyon sinusukat sa raster point kada metro. Ang mga ito ay lalong mahalaga para sa pagpapanatili ng sukat ng mga na-scan na larawan. Ang mga larawang ginawa gamit ang mga graphic editor ay karaniwang may mga zero sa mga field na ito.

Bilang ng mga kulay nagbibigay-daan sa iyo na bawasan ang laki ng talahanayan ng palette kung ang larawan ay aktwal na naglalaman ng mas kaunting mga kulay kaysa pinapayagan ng piniling lalim ng kulay. Gayunpaman, sa pagsasagawa ng mga naturang file ay halos hindi na matagpuan. Kung ang bilang ng mga kulay ay ang maximum na pinapayagan ng lalim ng kulay, halimbawa 256 na kulay sa 8 bits, ang field ay nakatakda sa zero.

Bilang ng mga pangunahing kulay- nagmula sa simula ng palette, at ipinapayong ipakita ito nang walang pagbaluktot. Mahalaga ang field na ito kapag ang maximum na bilang ng mga kulay ng display ay mas mababa kaysa sa Bmp file palette. Sa pagbuo ng format, malinaw na ipinapalagay na ang pinakamadalas na mga kulay ay makikita sa simula ng talahanayan. Ngayon ang kinakailangan na ito ay halos hindi sinusunod, ibig sabihin, ang mga kulay ay hindi inayos ayon sa dalas kung saan nangyari ang mga ito sa file. Ito ay napakahalaga, dahil ang mga palette ng dalawang magkaibang mga file, kahit na binubuo ng parehong mga kulay, ay naglalaman ng mga ito (ang mga kulay) sa ibang pagkakasunud-sunod, na maaaring makabuluhang kumplikado ang sabay-sabay na pagpapakita ng mga naturang larawan sa screen.

Ang header ng impormasyon ay sinusundan ng isang talahanayan ng kulay, na isang hanay ng 256 (sa bilang ng mga kulay) na 4-byte na mga patlang. Ang bawat field ay tumutugma sa isang kulay sa palette, at tatlo sa apat na byte ay tumutugma sa mga bahagi ng asul, berde at pula na bahagi para sa kulay na ito. Ang huling, pinaka makabuluhang byte ng bawat field ay nakalaan at katumbas ng 0.

Pagkatapos ng talahanayan ng kulay mayroong data ng imahe, na nakasulat kasama ang mga linya ng raster mula sa ibaba hanggang sa itaas, at sa loob ng linya - mula kaliwa hanggang kanan. Dahil sa ilang mga platform imposibleng magbasa ng isang unit ng data na mas mababa sa 4 na byte, ang haba ng bawat linya ay nakahanay sa isang hangganan na 4 na byte, ibig sabihin, kung ang haba ng linya ay hindi isang multiple ng apat, ito ay may palaman mga zero. Ang sitwasyong ito ay dapat isaalang-alang kapag nagbabasa ng file, bagama't maaaring mas mahusay na tiyakin nang maaga na ang mga pahalang na sukat ng lahat ng mga imahe ay isang multiple ng 4.

Tulad ng nasabi na namin, ang format ng file ay idinisenyo upang maging unibersal para sa iba't ibang mga platform, kaya hindi nakakagulat na ang mga kulay ng palette ay nakaimbak dito nang naiiba kaysa sa kaugalian para sa VGA. Sa panahon ng pamamaraan ng pagbabasa, isinasagawa ang kinakailangang recoding. (Pag-uusapan natin kung ano ang VGA palette at kung paano ito gagawin sa mga sumusunod na artikulo.)

Ang module para sa pagbabasa ng 256-kulay na Bmp file ay may dalawang pamamaraan lamang. Tulad ng makikita mula sa listahan, ang mga sukat ng imahe ay dapat na maipasa sa ReadBMP file reading procedure. Ito ay maginhawa kung ang imahe ay hindi kailangang basahin nang buo. Kapag nalaman nang maaga ang mga sukat, hindi ito nagdudulot ng mga problema, ngunit makabubuti kung, gamit ang aming module, posible na basahin ang anumang mga imahe, kabilang ang mga hindi alam ang laki nang maaga. Para sa layuning ito, ibinigay ang pamamaraan ng ReadBMPheader, na nagbabasa lamang ng header ng file. Sa pamamagitan ng pagtawag dito, maaari mong suriin kung ang imahe ay naitala sa napiling 256-kulay na format, alamin ang mga sukat nito, at pagkatapos lamang maglaan ng memorya para dito at ilagay ito sa inilaan na buffer.

Ngayon, ikonekta natin ang isang bagong module sa ating programa. Upang gawin ito, isusulat namin ang pangalan nito sa direktiba ng mga gamit, at magbibigay din ng array para sa pag-iimbak ng data tungkol sa palette, na maaaring ilarawan tulad nito:

P: arrayof byte;

Ang pamamaraan ng CreateSprite, na tumatawag sa operasyon upang basahin ang isang file mula sa isang bagong module, ay pinasimple (tingnan).

Istraktura ng Bmp file

Extension ng file .bmp
Kategorya ng file
Halimbawang file (2.7 MiB)
(487.85 KiB)
Mga kaugnay na programa Adobe Photoshop
MS Paint
Microsoft Photo Editor
Paintbrush
Pangalan Ang haba Bias Paglalarawan
Header ng file (BitMapFileHeader)
Uri2 0 Lagda "BM"
Sukat4 2 laki ng file
Nakareserba 12 6 Nakareserba
Nakareserba 22 8 Nakareserba
OffsetBits4 10 Offset ng imahe mula sa simula ng file
Header ng impormasyon (BitMapInfoHeader)
Sukat4 14 Haba ng header
Lapad4 18 Lapad ng larawan, mga puntos
taas4 22 Taas ng larawan, mga puntos
Mga eroplano2 26 Bilang ng mga eroplano
BitCount2 28 Lalim ng kulay, mga bit bawat tuldok
Compression4 30 Uri ng compression (0 - hindi naka-compress na larawan)
Laki ng Larawan4 34 Laki ng larawan, byte
XpelsPerMeter4 38 Pahalang na resolusyon, mga tuldok bawat metro
YpelsPerMeter4 42 Vertical na resolution, mga tuldok bawat metro
Mga Kulay na Ginamit4 46 Bilang ng mga kulay na ginamit (0 ang maximum na posible para sa isang partikular na lalim ng kulay)
Mga Kulay Mahalaga4 50 Bilang ng mga pangunahing kulay
Color table (palette)
ColorTable1024 54 256 elemento ng 4 byte
Data ng Larawan (BitMap Array)
ImaheSukat1078 Imahe na naitala sa mga hilera mula kaliwa hanggang kanan at ibaba hanggang itaas

Listahan 1

unit bmpread; (mga pamamaraan para sa pagtatrabaho sa Bmp) uri ng interface arttype = arrayof byte; arptr = ^artype; bmFileHeader = record (file header) Typf: salita; (pirma) Sukat: longint; (haba ng file sa bytes) Res1: salita; (nakareserba) Res2: salita; (reserved) OfBm: longint; (image offset in bytes (1078)) end; bmInfoHeader = talaan (header ng impormasyon) Sukat: longint; (haba ng header sa bytes (40)) Widt: longint; (lapad ng imahe (sa mga pixel)) Heig: longint; (taas ng imahe (sa mga pixel)) Plano: salita; (bilang ng mga eroplano (1)) BitC: salita; (color depth (bits per dot) (8)) Comp: longint; (uri ng compression (0 - hindi)) SizI: longint; (laki ng imahe sa bytes) XppM: longint; (horizontal resolution) ((dots per meter - kadalasan 0)) YppM: longint; (vertical resolution) ((dots per meter - kadalasan 0)) NCoL: longint; (bilang ng mga kulay) ((kung ang maximum na pinapayagan ay 0)) NCoI: longint; (bilang ng mga pangunahing kulay) dulo; bmHeader = record (buong file header) f: bmFileHeader; (file header) i: bmInfoHeader; (header ng impormasyon) p: arrayof byte; (palette table) dulo; bmhptr = ^bmHeader; (pagbabasa ng isang imahe mula sa isang Bmp file) pamamaraan ReadBMP(image:arptr; (array na may larawan) xim,yim:word; (mga sukat) pal:arptr; (palette) filename:string); (pangalan ng file) (pagbabasa ng Bmp file header) pamamaraan ReadBMPheader(header:bmhptr;filename:string); pagpapatupad ($R-) (pagbabasa ng imahe mula sa Bmp file) procedure ReadBMP(image:arptr; xim,yim:word; pal:arptr; filename:string); var h: bmHeader; i:integer; bmpfile: file; s: longint; magsimulang magtalaga(bmpfile,filename); i-reset(bmpfile,1); blockread(bmpfile,h, sizeof(h)); (basahin ang header) para sa i:= 0 hanggang yim-1 magsisimula (basahin ang bawat linya) blockread(bmpfile,image^[(yim-i-1)*xim],xim); kung (xim mod 4)<>0 pagkatapos ay blockread(bmpfile,s,4 - (xim mod 4)); wakas; malapit (bmpfile); para sa i ^= 0 to 255 magsisimula (palette transformation) pal^ := h.p shr 2; (asul) pal^ := h.p shr 2; (berde) pal^ := h.p shr 2; (pula) dulo; wakas; (pagbabasa ng header ng Bmp file) procedure ReadBMPheader(header:bmhptr;filename:string); var bmpfile:file; magsimulang magtalaga(bmpfile,filename); i-reset(bmpfile,1); blockread(bmpfile,header^,sizeof(header^)); malapit (bmpfile); wakas; wakas.

Listahan 2

( sprite) procedure CreateSprite(s:string; x,y,dx,dy:integer); var f: file; (file na may sprite image) simulan getmem(Sprt.Img,sizeof(SpriteArrayType)); (maglaan ng memorya para sa sprite) getmem(Sprt.Back,sizeof(SpriteArrayType)); (maglaan ng memorya para sa buffer) Readbmp(@(Sprt.Img^),Xsize,Ysize,@p,s); Sprt.x:= x; Sprt.y:=y; (itakda ang mga inisyal na halaga) Sprt.dx:= dx; (coordinate at increments) Sprt.dy:= dy; wakas;

Ang mga modernong tao ay madalas na nagtatrabaho sa mga digital na imahe ng iba't ibang mga format. Ginagamit ang mga ito sa Internet, sa isang computer, sa isang smartphone, sa isang digital camera, sa mga action camera at iba pang mga device. Ngunit mayroong isang format na maaaring malito ang ilang mga gumagamit - BMP. Ito ay hindi isang partikular na karaniwang uri ng imahe (kahit sa ngayon), ngunit maaari pa rin itong makita. Samakatuwid, ito ay magiging maganda upang maunawaan kung ano siya. Subukan nating sagutin ang tanong kung ano ang format ng BMP. Ngunit kailangan muna nating pag-usapan ang kasaysayan ng pinagmulan nito. Makakatulong ito sa iyo na maunawaan kung bakit ito ginawa sa unang lugar. Kaya, magsimula tayo sa kasaysayan ng paglikha ng BMP format.

Background

Sa paligid ng 1994, kailangan ng mga developer ng bagong format ng imahe para magamit sa mga produkto ng software. Ang mga pamantayan ay mahigpit. Ang format ay kailangang gumana sa isang 256-kulay na palette at may tamang sukat. Ang BMP format ay ipinakilala sa lalong madaling panahon. Ito ay isang tunay na tagumpay sa oras na iyon. Ito ay malawakang ginagamit halos lahat ng dako. Kahit na sa Microsoft, na bumuo nito.

Gayunpaman, lumipas ang mga taon, at ang format na ito ay hindi na hinihiling. Marami pang mga advanced na teknolohiya ng compression ang lumitaw. Kasabay nito, ang kalidad ng kulay ng mga bagong format ay mas mahusay. Ngayon ang BMP ay ginagamit lamang sa ilang mga programa. At kahit na, sa mga na ang mga developer ay hindi nag-abala sa interface, halimbawa, Windows OS. Ang BMP file ay walang pag-asa na luma na. Ngunit sa ilang kadahilanan ay ginagamit pa rin nila ito. Ngayon subukan nating maunawaan kung anong uri ng hayop ito.

Ano ang BMP?

Ang BMP ay isang uri ng file para sa pag-iimbak ng mga imahe ng bitmap. Raster lang. Ang mga vector graphics ay hindi para sa format na ito. Ang kakaiba ng format na ito ay hindi ito gumagamit ng anumang mekanismo ng compression. Sa teorya, dapat itong magbigay ng pinakamataas na kalidad ng imahe. Ngunit ang problema ay ang laki ng naturang imahe ay magiging napakalaki. Iyon ang dahilan kung bakit ang format ng raster na imaheng ito ay nawalan ng katanyagan. Nagsimulang bumagsak ang BMP mula sa Olympus pagkatapos ng paglitaw ng PNG. Ang format na ito ay naging posible hindi lamang upang i-save ang mataas na kalidad na mga imahe sa isang maliit na sukat, ngunit din upang gumana sa mga layer, na napakahalaga sa modernong mundo.

Gayunpaman, ang BMP File ay umiiral pa rin at ginagamit. Samakatuwid, mahalaga para sa mga gumagamit na malaman kung paano buksan ang mga naturang file at kung paano i-convert ito sa mas maginhawang mga format. Ito ang tatalakayin natin ngayon. Ito ay nagkakahalaga ng pagsasabi kaagad na mayroong napakaraming ganoong mga programa. At lahat ng mga ito ay magagawang gumana nang sapat sa format na ito, dahil medyo luma na ito. Ngunit ang conversion ay may sariling mga nuances na nagkakahalaga ng pagbanggit.

Paano buksan ang BMP

Sa ngayon, ang isang mas marami o hindi gaanong advanced na graphic file viewer ay maaaring hawakan ang gawaing ito. Kakatwa, kahit isang karaniwang Windows viewer ay maaaring magbukas ng format na ito, kahit na may mga kahila-hilakbot na preno. Ngunit ang FS Image Viewer at ACDSee ay pinakamahusay na nakayanan ang gawaing ito. Ang mga advanced na produkto tulad ng Photoshop at mga editor mula sa Corel ay may kakayahang magtrabaho sa mga file na may ganitong format. Sa pangkalahatan, nababasa ng lahat ng modernong manonood ang format na ito, dahil medyo luma na ito.

Gayunpaman, ang lahat ng nasa itaas ay nalalapat lamang sa mga operating system ng pamilyang Windows. Paano magbukas ng BMP file sa Linux o Mac OS? May mga espesyal na produkto ng software na sumusuporta sa format na ito. At marami sa kanila. Kaya walang magiging problema. At sinusuportahan din ng Mac OS ang Photoshop, na ganap na omnivorous. Bilang karagdagan sa iba pang mga programang multimedia.

BMP conversion

Paano i-convert ang BMP sa JPG o iba pang mas karaniwang format? Ang lahat ay nakasalalay sa kung anong kalidad ng larawan ang kinakailangan sa output. Kung ang mga pagkalugi ay dapat na minimal, pagkatapos ay mas mahusay na gumamit ng Photoshop o isang bagay na katumbas para sa mga layuning ito. Ang Photoshop lamang ang nagpapahintulot sa iyo na mag-save ng isang imahe nang hindi nawawala ang kalidad. At kung gumamit ka ng PNG o PSD na mga format para mag-save, maaari ka ring mag-save ng mga layer. Kung hindi mahalaga ang kalidad, maaari mong gamitin ang anumang converter. Halos lahat ng mga ito ay sumusuporta sa conversion sa JPEG, PNG, BMP at iba pang sikat na format.

At muli, tanging mga program para sa Windows ang nakalista sa itaas. Sa Linux o Mac OS, ang mga bagay na may conversion ay medyo naiiba. Ang sistema ng Apple ay may suporta para sa Photoshop, kaya ang mabilis na pag-convert ng isang BMP na imahe sa ibang format nang hindi nawawala ang kalidad ay hindi isang problema. Ngunit sa Linux kailangan mong gumamit ng iba't ibang mga converter, na kadalasan ay hindi makapagbigay ng pinakamataas na kalidad.

Ano ang maaaring gamitin sa format na ito?

Bagama't luma na ang format ng BMP, maaari pa rin itong gamitin sa ilang mga kaso. Ang katotohanan na ang buong interface ng Windows ay batay sa format ng raster na ito ay sapat na. Bakit ganon? Dahil ang paggamit ng BMP ay napaka-maginhawa. Ito ay may magandang kulay at isang kumpletong kakulangan ng compression. Gayundin, ang mga larawan sa format na ito ay maaaring i-edit kahit ilang beses. At ang kalidad ay hindi magdurusa sa lahat. Hindi tulad ng parehong JPEG. Ito mismo ang nagpapaliwanag sa sigla ng format na ito. Maraming mga developer ng Windows program ang aktibong gumagamit ng mga BMP na imahe sa kanilang mga produkto.

Ang isa pang lugar ng aplikasyon ng format ay ang mga BIOS ng computer. Ang ilan sa kanila ay may napakagandang mga larawan (maaaring kasama nila ang logo ng tagagawa, ilang elemento ng interface, atbp.). Lahat ng mga ito ay ginawa sa BMP format. Ang mga raster na larawan ng ganitong uri ay mahusay na gumaganap sa mga system na walang sapat na graphical na interface. Iyon ang dahilan kung bakit ginagamit ang mga ito sa mga BIOS.

Sukat

Ito ay nagkakahalaga ng pagpuna na ang isang magandang larawan sa BMP format ay "titimbangin" ng marami. Ang bagay ay ang format ng file na ito ay hindi gumagamit ng compression. Samakatuwid ang laki ay hindi maaaring bawasan. Halimbawa, ang isang de-kalidad na litrato na may resolution na 1280 by 720 pixels ay magkakaroon ng sukat na humigit-kumulang 300 megabytes. Ito ang kakaiba ng format na ito.

Panloob na istraktura at pagpapalawak

Ang istraktura ng isang BMP file ay maaaring ilarawan bilang mga sumusunod: ito ay isang solong-layer na raster-type na imahe na may disenteng density at magandang kulay. Ito ang pangunahing disbentaha ng format - hindi ito maaaring gumamit ng mga karagdagang layer. Samakatuwid, pinalitan sila sa "web" ng mas advanced na mga format na sumusuporta sa multi-layering.

Konklusyon

Kaya, tiningnan namin ang luma, ngunit ginagamit pa rin sa ilang mga lugar, BMP format. Ito ay isang format ng larawan ng raster na ipinagmamalaki ang kawalan ng anumang compression at tugma sa halos lahat ng mga programa, parehong mga manonood at mga editor. Maaari itong magamit sa mga modernong programa upang matiyak na gumagana ang interface. At sa operating system ng Windows malawak itong ginagamit hanggang ngayon. Ang pag-convert ng format na ito sa iba ay hindi mahirap. Mayroong isang malaking halaga ng naaangkop na software para dito. At hindi lamang para sa Windows. Sa pangkalahatan, mabubuhay pa rin ang format na ito, sa kabila ng paglitaw ng mga mas advanced at de-kalidad na mga format.

Paano itago ang teksto sa isang bitmap na imahe. Sa kasamaang palad, wala akong nakitang anumang mga paksa sa paksang ito at nagpasya na punan ang puwang na ito. Sa ilalim ng hiwa makakahanap ka ng isang paraan upang itago ang teksto sa isang bitmap, pati na rin ang isang pagpapatupad sa C#.

Pagbubuo ng problema

Itago ang arbitrary na text sa windows-1251 encoding sa isang 24-bit bitmap na imahe at i-output ito pabalik nang walang distortion.

istraktura ng bmp file

Una, hayaan mong ipaalala ko sa iyo kung ano ang bitmap file. Sigurado ako na alam mo ang lahat ng ito, magiging mas malinaw na ilarawan ang algorithm para sa pagtatago ng teksto batay sa ipinakitang materyal. Kaya. Ang anumang bmp file ay binubuo ng apat na bahagi:
  1. Header ng file
  2. Pamagat ng larawan (maaaring nawawala)
  3. Palette (maaaring nawawala)
  4. Ang imahe mismo
Ang header ng file ay naglalaman ng impormasyon ng serbisyo, kabilang ang bit depth ng larawan. Sa pamamagitan ng paraan, ang palette ay hindi ginagamit para sa isang 24-bit na pagguhit. Dahil malinaw naming sinabi sa takdang-aralin na gagana lamang kami sa mga 24-bit na imahe, mas mabuti na maaari naming suriin ang input na imahe para sa pagsunod sa mga kinakailangan.
Ngayon ay lumipat tayo sa mismong larawan. Tulad ng alam mo, ang bmp format ay hindi nagbibigay ng compression bilang default (bagaman mayroong suporta para sa compression gamit ang RLE algorithm). Kaya, ang bawat pixel sa aming kaso ay naka-encode ng 24 bits, isang byte para sa bawat bahagi ng kulay. Samakatuwid, maaari kaming mag-encode ng hindi hihigit, hindi bababa, ngunit eksaktong 16777216 na mga kulay. Para sa kalinawan, narito ang isang larawan:

Ang ideya ng isang algorithm ng pagtatago ng teksto

Marahil ay nahulaan mo na kung ano ang ideya. Ang bagay ay ang mata ng isang karaniwang tao (hindi isang propesyonal na artist o photographer) ay nakikilala ng mas kaunting mga kulay kaysa sa ipinahiwatig sa itaas. Walang isang libro ang may malinaw na sagot sa tanong kung gaano karaming mga kulay ang maaaring makilala ng mata, ngunit ang pinakamalaking figure na nakita ko ay 10 milyon hiram para sa ating makasariling layunin.
Ilang numero: halimbawa, kunin natin at tahasang ibawas ang dalawang low-order bit mula sa bahagi ng RGB. Ibig sabihin, sa 24 bits ay magkakaroon tayo ng 18 na natitira, na maaaring mag-encode ng eksaktong 262144 na kulay. Ngayon ay kumuha tayo ng teksto sa windows-1251 encoding, kung saan ang bawat karakter ay kinakatawan ng 8 bits. Gamit ang mga simpleng kalkulasyon sa matematika, nalaman namin na ang 3 character ay maaaring maimbak sa 4 na pixel. Kaya, sa isang 1024x768 na imahe, kung saan mayroong 786432 pixels, maaari kang mag-imbak ng 589824 na mga character. Hindi masama, tama? Para sa kalinawan, magbibigay ako ng dalawang larawan. Sa una ay ang orihinal na imahe, at sa pangalawa ay isang imahe kung saan ang hindi bababa sa makabuluhang dalawang piraso ng bawat bahagi ng kulay ay puno ng teksto. Hayaan akong magpareserba kaagad na ang mga imahe ay na-convert sa png upang makatipid ng trapiko.

Orihinal na larawan:


Larawan na naglalaman ng text


Kung titingnan mong mabuti, ang mga kulay ay lilitaw na mas duller sa pangalawang larawan. Oo nga. Ngunit alam mo at ako na may mali sa ipinakitang larawan, at kung hindi natin alam, hindi natin mahuhulaan na may ilang uri ng tekstong nakatago dito. Siyanga pala, nakatago sa larawan ang katagang “Hello World!!! =)" pinarami ng 100 beses.
Iyon lang. Tulad ng nakikita mo, ang ideya ay napaka-simple. Sa pamamagitan ng paraan, ang ipinakita na pamamaraan ay tinatawag na LSB (salamat sa frol para sa tip). Sa wakas, maaari mong tingnan ang pagpapatupad sa C#.

Pagpapatupad sa C#

Ang ipinakita na pagpapatupad ay hindi kwalipikado para sa isang award na "Perfect Code" ipinapakita lamang nito ang inilarawang algorithm sa pagsasanay. Sa kasong ito, hindi ko hinahabol ang kagandahan ng code, ngunit ang kalinawan.

Kadalasan, kapag nagtatrabaho sa mga graphics, maraming mga gumagamit ang nakatagpo ng mga imahe sa format na BMP. Ngayon, kakaunti ang nakakaalam kung ano ito. Ngayon ay titingnan natin ang BMP graphic format nang mas detalyado. Higit pa rito, hindi lamang natin susuriin ang kasaysayan ng pinagmulan at ebolusyon nito, ngunit nag-aalok din ng ilang simpleng pamamaraan para sa pag-convert nito sa iba pang mga sikat na format.

Ano ang BMP format?

Huwag na tayong maglagay ng masyadong teknikal na detalye. Tandaan na ang BMP ay isang format para sa pag-iimbak ng mga graphic na larawan sa anyo ng isang bitmap batay sa mga single-layer na raster.

Oo ito ay totoo. Sa una, ang format ng imahe ng BMP ay eksklusibong inilapat sa mga raster na imahe at isang unibersal (karaniwang) extension para sa lahat ng mga graphics sa pangkalahatan.

Kasaysayan ng pinagmulan

Ang kasaysayan ng paglikha ng format na ito ay inextricably na nauugnay sa Microsoft Corporation, na unang ipinatupad ito sa pangunahing ideya nito - ang Windows operating system. Bilang karagdagan, sa kabila ng patuloy na kumpetisyon sa Apple, ang suporta para sa ganitong uri ng mga graphics ay kalaunan ay inihayag para sa OS/2 operating system.

Totoo, mula noon ang BMP graphics format ay sumailalim sa maraming pagbabago. Ito ay orihinal na ipinapalagay na ang istraktura ng isang imahe ay binuo sa isang kumbinasyon ng mga maliliit na parisukat, ngayon ay kilala bilang mga pixel. Ito ay pinaniniwalaan na ang bawat pixel sa isang imahe ay maaaring maglaman ng data tungkol sa ibang lalim ng kulay (ang bilang ng mga bit bawat naturang graphic unit). Ang mga halaga na ginamit upang tukuyin ang lalim ng bit ng kulay ay lilitaw tulad ng sumusunod: 1, 2, 4, 8, 16, 24, 32, 48, 64 bits.

Sa kasong ito, para sa mga halagang mas mababa sa 8, ang kulay ay ipinahiwatig lamang gamit ang index ng palette (talahanayan) ng mga shade, at para sa mga halaga sa itaas ng index ay kinuha mula sa karaniwang modelo ng RGB. Ang huli ay naglalaman ng mga pagkakaiba-iba ng kulay na nakuha sa pamamagitan ng paghahalo ng pula, berde at asul.

Tulad ng malinaw na, mas mataas ang bit depth, mas malaki ang laki ng huling imahe. Dapat sabihin na ang format ng BMP file, kapwa sa mga panahong iyon at ngayon, ay mukhang isang uri ng mastodon, dahil ang laki nito ay medyo malaki. Ito ay dahil sa ang katunayan na ang imahe mismo ay hindi naka-compress, kumpara sa, sabihin nating, ang parehong format ng JPG. Ang laki ng mga file na may iba't ibang uri ng mga extension na naglalaman ng parehong larawan ay maaaring mag-iba hindi lamang daan-daan - sampu-sampung libong beses.

Paano buksan ang format ng BMP file?

Tulad ng para sa pagbubukas ng mga larawan ng ganitong uri, ang anumang operating system ng Windows ay may mga built-in na tool para dito.

Hanggang sa nalikha ang pagtingin sa mga application, ang pangunahing tool sa pag-edit ay nanatiling katutubong programa ng Paint na kasama sa anumang bersyon ng Windows. Noong panahong iyon, eksklusibong sinusuportahan ng application na ito ang BMP format.

Tulad ng malinaw na, sa pag-unlad ng teknolohiya at sa ebolusyon ng format mismo, nagbago din ang programa. Ngayon, ang mga kakayahan ng Paint ay mas malaki kaysa sa mga naunang bersyon nito.

Bilang karagdagan, sa pagdating ng mga programa para sa pagtingin at pag-edit ng mga graphic, ang format ng BMP file ay inihayag sa teknikal na suporta at sa kanila. Hindi nakakagulat, dahil siya ang "lolo sa tuhod" ng halos lahat ng mga extension ng file ng imahe na kilala ngayon.

Makakahanap ka ng maraming mga programa para sa pagtatrabaho sa naturang graphic na data. Sa mga tool sa pagtingin, halimbawa, sa Windows maaari kang gumamit ng isang karaniwang tool sa mga third-party na application, ang mga pakete ng software tulad ng ACDSee o Irfan View at marami pang iba ay medyo sikat.

Tulad ng para sa pag-edit, maaari mong gamitin ang anumang bagay para sa trabaho, halimbawa, ang parehong Adobe Photoshop, Corel Draw o anumang iba pang graphic editor na may kahit isang minimal na hanay ng mga tool at kakayahan.

Ang pinakasimpleng paraan upang i-convert ang BMP format

Ngayon tingnan natin kung paano baguhin ang BMP format sa pinakasimpleng paraan. Upang gawin ito, maaari mong gamitin ang parehong mga graphic editor.

Kung kukunin natin ang karaniwang application ng Paint bilang isang halimbawa, una ang nais na BMP file ay binuksan dito, pagkatapos kung saan ang "Save As..." na utos ay pinili mula sa menu na "File", kung saan sa ugat, sa ilalim na linya (drop-down na menu), makakahanap ka ng mga sinusuportahang format.

Sa totoo lang, sa anumang iba pang graphic editor, ang teknolohiya para sa pag-convert ng bitmap ay katulad ng inilarawan sa itaas. Sa ilang mga application, maaari ka ring makahanap ng mga utos sa pag-export, na, sa prinsipyo, ay hindi partikular na naiiba, dahil kapag ginagamit ang mga ito, ang buong pamamaraan ay muling bumagsak sa pagpili ng isa pang suportadong graphic na format maliban sa orihinal na BMP.

Paggamit ng mga converter

Ang isa sa mga pinakamadaling paraan upang mai-convert ang ibang uri ng imahe sa BMP na format, bukod pa sa paggamit ng karaniwang mga tool sa Windows at graphic editor, ay ang paggamit ng mga dalubhasang converter na awtomatikong gumagana.

Simple lang ang lahat dito. Ang gumagamit ay nagdaragdag ng mga graphic na file na iko-convert sa window ng programa, pagkatapos ay pipiliin ang panghuling format (sa kasong ito BMP) at pinindot ang pindutan upang simulan ang proseso ng conversion. Ang mga huling file sa bagong form ay ise-save sa folder na ang lokasyon ay nakatakda bilang default sa application o tinukoy nang manu-mano.

Sa pamamagitan ng paraan, ang parehong naaangkop sa reverse na proseso, kapag kailangan mong i-convert ang BMP format sa ilang iba pa.

Sa lahat ng maraming mga programa sa lugar na ito sa Internet, maaari kang makahanap ng maraming mga mapagkukunan na nagbibigay-daan sa iyo upang isagawa ang mga naturang pagbabago online. Sa kasong ito lamang, ang user ay nag-a-upload ng mga file sa site, pinipili ang huling format, at pagkatapos ay i-download ang resulta sa kanyang computer. Sumang-ayon, kumpara sa unang dalawang pamamaraan, hindi ito masyadong maginhawa.

Konklusyon

Iyon lang ang masasabi tungkol sa BMP graphics format sa maikling salita. Para sa malinaw na mga kadahilanan, ang teknikal na bahagi ng isyu sa mga tuntunin ng istraktura ng file ay hindi isinasaalang-alang. Ang nasabing data ay malamang na hindi magsasabi sa karaniwang gumagamit ng anuman.

Ngunit sa konklusyon, nais kong magdagdag ng ilang mga salita tungkol sa pag-convert ng mga graphic na file sa hindi naka-compress na BMP na format. Siyempre, ang kasalukuyang bersyon nito ay tumatagal ng mas kaunting espasyo sa disk. Ngunit iba pa rin ito sa mas modernong naka-compress na mga uri ng data. Sa prinsipyo, ang format ng BMP mismo ay maaaring tawaging medyo lipas na, dahil kakaunti ang gumagamit nito ngayon. Samakatuwid, ang pag-convert ng mga naka-compress na format sa uri ng mga graphic na file na may extension na .bmp ay tila malinaw na hindi praktikal sa kasalukuyang yugto.