Datový formát BMP (bitmapa). Jaká je přípona souboru BMP? Co je soubor bmp

Formát souboru BMP (zkratka pro BitMaP) je nativní formát rastrové grafiky pro Windows, protože nejvíce odpovídá nativnímu formátu Windows, ve kterém tento systém ukládá svá rastrová pole. Přípona souboru nejčastěji používaná ve formátu BMP je BMP, ačkoli některé soubory mají příponu RLE, což znamená kódování délky běhu. Přípona RLE názvu souboru obvykle označuje, že rastrové informace souboru byly komprimovány pomocí jedné ze dvou metod komprese RLE, které jsou platné pro soubory ve formátu BMP.

V souborech BMP jsou barevné informace každého pixelu zakódovány v 1, 4, 8, 16 nebo 24 bitech (bitech/pixel). Počet bitů na pixel, nazývaný také barevná hloubka, určuje maximální počet barev v obrázku. Obrázek s hloubkou 1 bit/pixel může mít pouze dvě barvy a s hloubkou 24 bit/pixel - více než 16 milionů různých barev.

Níže uvedený diagram ukazuje strukturu typického souboru BMP obsahujícího 256barevný obrázek (hloubka 8 bitů/pixel). Soubor je rozdělen do čtyř hlavních částí: hlavička rastrového grafického souboru, informační hlavička rastrového pole, tabulka barev a samotná data rastrového pole. Záhlaví souboru rastrové grafiky obsahuje informace o souboru, včetně adresy, na které začíná datová oblast rastrového pole. Informační hlavička rastrového pole obsahuje informace o obrázku uloženém v souboru, jako je jeho výška a šířka v pixelech. Tabulka barev poskytuje hodnoty primárních barev RGB (červená, zelená, modrá) pro barvy použité v obrázku. Programy, které čtou a zobrazují soubory BMP, při použití video adaptérů, které neumožňují zobrazení více než 256 barev, mohou programově nastavit takové hodnoty RGB v barevných paletách adaptérů pro přesnou reprodukci barev.

Formát skutečných dat rastrového pole v souboru BMP závisí na počtu bitů použitých ke kódování dat barev pro každý pixel. U obrázku s 256 barvami je každý pixel v části souboru, která obsahuje skutečná data rastrového pole, popsán jedním bajtem (8 bitů). Tento popis pixelu nepředstavuje hodnoty barev RGB, ale slouží jako ukazatel pro vstup do tabulky barev souboru. Pokud je tedy R/G/B=255/0/0 uložena jako první hodnota barvy RGB v tabulce barev souboru BMP, pak bude hodnotě pixelu 0 v rastrovém poli přiřazena barva jasně červená. Hodnoty pixelů jsou uloženy v pořadí zleva doprava, počínaje (obvykle) na spodním řádku obrázku. V souboru BMP s 256 barvami je tedy první bajt dat rastrového pole indexem barvy pixelu umístěného v levém dolním rohu obrázku; druhý bajt představuje index pro barvu pixelu sousedícího vpravo atd. Pokud je počet bajtů v každém řádku lichý, pak se do každého řádku přidá jeden bajt navíc, aby se data rastrového pole zarovnala na 16bitových hranicích .


Ne všechny soubory BMP mají strukturu jako na obrázku. Například 16bitové a 24bitové/pixelové soubory BMP nemají tabulky barev; v těchto souborech hodnoty pixelů rastrového pole přímo charakterizují hodnoty barev RGB. Lišit se mohou i formáty vnitřního úložiště jednotlivých částí souboru. Například informace rastrového pole v některých souborech BMP s 16 a 256 barvami lze komprimovat pomocí algoritmu RLE, který nahrazuje sekvence identických obrazových bodů tokeny, které určují počet obrazových bodů v sekvenci a jejich barvu. V systému Windows můžete pracovat se soubory BMP ve stylu OS/2, které používají různé formáty záhlaví rastrového pole a tabulky barev.

Pokud máte na svém počítači nainstalováno antivirový program Umět prohledejte všechny soubory v počítači a také každý soubor jednotlivě. Libovolný soubor můžete zkontrolovat kliknutím pravým tlačítkem myši na soubor a výběrem příslušné možnosti pro kontrolu souboru na přítomnost virů.

Například na tomto obrázku je to zvýrazněno soubor můj-soubor.bmp, pak je třeba na tento soubor kliknout pravým tlačítkem a vybrat možnost v nabídce souboru "skenovat pomocí AVG". Když vyberete tuto možnost, AVG Antivirus otevře a zkontroluje soubor na přítomnost virů.


Někdy v důsledku toho může dojít k chybě nesprávná instalace softwaru, což může být způsobeno problémem, ke kterému došlo během procesu instalace. To může narušit váš operační systém propojte svůj soubor BMP se správným aplikačním nástrojem, ovlivňující tzv "přidružení přípony souboru".

Někdy jednoduché přeinstalovat Adobe Illustrator CC může vyřešit váš problém správným propojením BMP s Adobe Illustrator CC. V jiných případech mohou nastat problémy s přidružením souborů špatné programování softwaru vývojáře a možná budete muset vývojáře kontaktovat s žádostí o další pomoc.


Rada: Zkuste aktualizovat Adobe Illustrator CC na nejnovější verzi, abyste měli jistotu, že budete mít nejnovější opravy a aktualizace.


Může se to zdát příliš zřejmé, ale často Problém může způsobovat samotný soubor BMP. Pokud jste obdrželi soubor prostřednictvím přílohy e-mailu nebo jej stáhli z webové stránky a proces stahování byl přerušen (například výpadek proudu nebo jiný důvod), soubor může být poškozen. Pokud je to možné, zkuste získat novou kopii souboru BMP a zkuste jej znovu otevřít.


Opatrně: Poškozený soubor může způsobit vedlejší poškození předchozího nebo existujícího malwaru ve vašem počítači, proto je důležité udržovat počítač aktuální pomocí aktuálního antiviru.


Pokud je váš soubor BMP související s hardwarem vašeho počítače k otevření souboru, který možná budete potřebovat aktualizovat ovladače zařízení spojené s tímto zařízením.

Tento problém obvykle spojené s typy mediálních souborů, které závisí na úspěšném otevření hardwaru uvnitř počítače, např. zvuková karta nebo grafická karta. Pokud se například pokoušíte otevřít zvukový soubor, ale nemůžete jej otevřít, možná budete muset aktualizovat ovladače zvukové karty.


Rada: Pokud se při pokusu o otevření souboru BMP zobrazí Chybová zpráva souboru .SYS, problém by asi mohl být související s poškozenými nebo zastaralými ovladači zařízení které je třeba aktualizovat. Tento proces lze usnadnit pomocí softwaru pro aktualizaci ovladače, jako je DriverDoc.


Pokud kroky problém nevyřeší a stále máte problémy s otevřením souborů BMP, může to být způsobeno nedostatek dostupných systémových prostředků. Některé verze souborů BMP mohou vyžadovat značné množství zdrojů (např. paměť/RAM, výpočetní výkon), aby se v počítači správně otevřely. Tento problém je poměrně častý, pokud používáte poměrně starý počítačový hardware a zároveň mnohem novější operační systém.

K tomuto problému může dojít, když má počítač potíže udržet krok s úkolem, protože operační systém (a další služby běžící na pozadí) spotřebovávat příliš mnoho zdrojů k otevření souboru BMP. Před otevřením souboru bitmapového obrázku zkuste zavřít všechny aplikace v počítači. Uvolnění všech dostupných zdrojů na vašem počítači vám poskytne nejlepší podmínky pro pokus o otevření vašeho souboru BMP.


jestli ty dokončil všechny výše popsané kroky a váš soubor BMP se stále neotevře, možná budete muset spustit aktualizace vybavení. Ve většině případů, dokonce i při použití starších verzí hardwaru, může být výpočetní výkon pro většinu uživatelských aplikací stále více než dostatečný (pokud nevykonáváte mnoho práce náročné na CPU, jako je 3D vykreslování, finanční/vědecké modelování nebo intenzivní multimediální práce). Tím pádem, je pravděpodobné, že váš počítač nemá dostatek paměti(běžně nazývané "RAM" nebo paměť s náhodným přístupem) k provedení úlohy otevření souboru.

Tento článek je o tom, jak vypadá grafický formát bmp. Přestože se jedná o jeden z jednodušších formátů, vzhledem k tomu, že existuje mnoho variant tohoto formátu, ne všechny body jsou zřejmé. Takže přestaňte nalévat vodu, začněme.

Formátové struktury

Formát bmp (od slov BitMaP - bitová mapa, nebo v ruštině bitové pole) je nekomprimovaný (většinou) obrázek, který je celkem snadno čitelný a zobrazitelný v OS Windows, který má speciální API funkce, které pomáhají.

Nejprve si uveďme grafické znázornění dat v bmp (obrázek převzatý z MSDN).

Na začátku je hlavička souboru (BITMAPFILEHEADER). Je popsán následovně:

bfType určuje typ souboru. Tady by měl být BM. Pokud otevřete jakýkoli soubor BMP v textovém editoru (nebo ještě lépe v hexadecimálním editoru), uvidíte, že první dva znaky jsou BM (od slova BitMap, jak jste pravděpodobně již uhodli).
bfSize je velikost samotného souboru v bajtech. Přísně vzato byste si to měli spočítat (což se doporučuje), ale špatně jsem nastavil velikost souboru (i když ne schválně :)) a nebyly žádné problémy (ACDSee čtěte bez problémů, můj program fungoval), ale nedoporučuji vám napiš to schválně špatně , najednou se objeví svědomitý program, který tuto velikost porovná se skutečnou a rozhodne, že to není bmp, ale něco jiného. V ideálním případě by všechny programy, aby se ujistil, že jde o skutečné bmp a ne o falešné, měly za prvé zkontrolovat, zda bfType obsahuje "BM" (bez uvozovek), a za druhé, že bfSize se rovná velikosti souboru .
bfReserved1 a bfReserved2 jsou rezervované a musí být nulové.
bfOffBits. Toto je jedna z nejdůležitějších oblastí v této struktuře. Ukazuje, kde začíná samotná bitmapa vzhledem k začátku souboru (nebo, jak říká MSDN, "od začátku struktury BITMAPFILEHEADER"), který popisuje obrázek. To znamená, že abyste se zaručili, že se dostanete na začátek pole, musíte napsat:

typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
DLOUHÁ biVýška;
dvouplošníky WORD;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
DLOUHÝ biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrDůležité;
) BITMAPINFOHEADER, * PBITMAPINFOHEADER;

biSize je velikost samotné konstrukce. Musí být inicializován následovně: bih.biSize = sizeof(BITMAPINFOHEADER);
I zde budeme předpokládat, že bih je deklarováno následovně: BITMAPINFOHEADER bih;
biWidth a biHeight nastavte šířku a výšku obrázku v pixelech, resp.
dvouplošníky udává počet rovin. Prozatím je vždy nastavena na 1.
biBitCount- Počet bitů na pixel. Více si o tom povíme níže.
biCompression označuje typ komprese. Nebuďte překvapeni ani vyděšeni, že bmp náhle zažije kompresi. Osobně jsem neviděl více než jeden komprimovaný bmp (ale neříkám, že neexistují). Pokud nedochází ke kompresi, musí být tento příznak nastaven na BI_RGB. V tomto článku mluvíme o nekomprimovaném formátu, takže ani nebudu uvádět další příznaky. Zdá se, že stejná struktura je použita v souborech JPEG a PNG, protože od Windows 98 se objevily možnosti BI_JPEG, což ukazuje, že tento obrázek je JPEG a BI_PNG, že je to PNG (o formátu Jpeg nic nevím, Právě jsem učinil tyto závěry na základě toho, co je napsáno v MSDN).
biSizeImage udává velikost obrázku v bajtech. Pokud je obrázek nekomprimovaný (to znamená, že předchozí pole je nastaveno na BI_RGB), pak by zde měla být zapsána nula. biXPelsPerMeter A biYPelsPerMeter označují horizontální a vertikální rozlišení (v pixelech na metr) konečného zařízení, na které bude bitmapa (rastr) vyvedena. Aplikace může tuto hodnotu použít k výběru ze skupiny zdrojů nejvhodnější bitmapy pro požadované zařízení. Faktem je, že formát bmp je v podstatě hardwarově nezávislý rastr, to znamená, že podoba získaného nezávisí na tom, na co se tento rastr promítá (tak říkajíc). Například obrázek bude vypadat stejně bez ohledu na to, zda je nakreslen na obrazovce monitoru nebo vytištěn na tiskárně. Rozlišení zařízení je ale různé a právě pro výběr nejvhodnějšího obrazu z dostupných se tyto parametry používají.
biClrUsed určuje počet použitých barev z tabulky. Pokud je tato hodnota nula, pak rastr používá maximální počet barev povolený hodnotou biBitCount. To platí pouze pro komprimované obrázky. Pokud je biClrUsed nenulová a hodnota biBitCount je menší než 16, pak biClrUsed určuje aktuální počet dostupných barev grafického jádra nebo ovladače zařízení. Pokud je biBitCount větší nebo roven 16, pak biClrUsed určuje velikost tabulky barev použité k optimalizaci aktuální systémové palety.
biClrDůležité- to je počet důležitých barev. Určuje počet barev, které jsou potřeba k zobrazení výkresu. Pokud je tato hodnota 0 (jak to obvykle bývá), pak jsou všechny barvy považovány za důležité.

Typy formátu BMP

Všechny typy formátu bmp podmíněně lze rozdělit na dva typy: paletové a nepaletové. Tedy zda je paleta v daném formátu použita nebo ne. Upozorňujeme, že paleta může být i v bezpaletových formátech, ale tam se nepoužívá. V bezpaletových bmps se barva vypočítává přímo z bitů, které jsou v souboru, počínaje od určitého místa. A v paletách každý bajt popisuje jeden nebo více pixelů a hodnoty bajtů (nebo bitů) jsou index barev v paletě. Pro začátek uvedu tabulku, která srovnává možné možnosti. Typ obrázku (paleta nebo bez palety) závisí na tom, kolik bitů je dáno na pixel, tedy na hodnotě biBitCount struktury BITMAPINFOHEADER.

biBitCountPaletový nebo nepaletový formátMaximální možný počet barevPoznámky 1 Paleta2 Dvoubarevný, ne nutně černobílý, paletový obrázek. Pokud je bit rastru (který je těsně pod) resetován (rovný 0), znamená to, že první barva z palety by měla být na tomto místě, a pokud je nastavena (rovná se 1), pak druhá. 4 Paleta16 Každý bajt popisuje 2 pixely. Zde je příklad z MSDN Pokud je první bajt na obrázku 0x1F, pak odpovídá dvěma pixelům, barva prvního je druhá barva z palety (protože odpočítávání začíná od nuly) a druhý pixel je 16. barva palety. 8 Paleta256 Jedna z nejběžnějších možností. Ale zároveň ty nejjednodušší. Paletka zabírá jeden kilobajt (ale je lepší s tím nepočítat). Jeden byte je jedna barva. Jeho hodnotou je navíc číslo barvy v paletě. 16 Žádná paleta2^16 nebo 2^15Toto je nejvíce matoucí možnost. Začněme tím, že je bez palet, tedy každé dva byty (jedno slovo WORD) v rastru jednoznačně definují jeden pixel. Ale stane se toto: existuje 16 bitů a jsou zde 3 barevné složky (červená, zelená, modrá). Ale 16 se nechce dělit 3. Proto jsou zde dvě možnosti. První je použít 15 bitů místo 16, pak je 5 bitů pro každou barevnou složku. Takto můžeme použít maximálně 2^15 = 32768 barev a získat trojité R-G-B = 5-5-5. Jenže pak se marně ztratí celý kousek ze 16. Ale stane se, že naše oči mezi všemi barvami vnímají lépe zelenou, a tak jsme se rozhodli dát tento jeden kousek zelené složce, čili pak dostaneme trojitý R-G-B = 5-6-5 a nyní můžeme použít 2^16 = 65536 barev. Nejnepříjemnější ale je, že se využívají obě možnosti. MSDN navrhuje, abyste rozlišili, kolik barev se používá, vyplňte pole biClrUsed ze struktury BITMAPINFOHEADER touto hodnotou. Chcete-li vybrat každou součást, musíte použít následující masky. Pro formát 5-5-5: 0x001F pro modrou složku, 0x03E0 pro zelenou a 0x7C00 pro červenou. Pro formát 5-6-5: 0x001F - modrá, 0x07E0 - zelená a 0xF800 červená složka. 24 Žádná paleta2^24 A toto je nejjednodušší formát. Zde 3 bajty definují 3 barevné složky. Tedy jedna komponenta na bajt. Jednoduše načteme strukturu RGBTRIPLE a použijeme její pole rgbtBlue, rgbtGreen, rgbtRed. Jdou v tomto pořadí. 32 Žádná paleta2^32 Zde 4 bajty definují 3 komponenty. Jeden byte se však nepoužívá. Lze jej použít například pro alfa kanál (průhlednost). V tomto případě je vhodné číst rastr pomocí struktur RGBQUAD, které jsou popsány následovně:

Ukládání dat ve formátu bmp

No a teď se dostáváme k tomu nejzajímavějšímu. Po strukturách BITMAPFILEHEADER a BITMAPINFOHEADER přichází paleta. Navíc, pokud je formát bez palet, nemusí tam být, ale neměli byste s tím počítat. Faktem je, že když jsem teprve začínal rozumět formátu bmp, četl jsem v jedné knize, že prý pokud je formát bez palet, tak nemá žádnou paletu. Byly tam dokonce dva obrázky - formátová schémata: jeden s paletou, druhý bez. A v té době jsem psal program, který pilně pracuje se soubory bmp. A musel jsem převést příchozí obrázky z 256 barev na 24bitové (pokud existují) do dočasných souborů. A paletu jsem jednoduše nevytvořil ve 24bitové (bfOffBits ze struktury BITMAPFILEHEADER se rovnal součtu sizeof(BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER), a příchozí 24bitové nechal beze změny. S 256barevnými rastry vše fungoval jak má,dokud jsem nenarazil na 24bitový obrázek,který měl dole zobrazený odpad místo požadované části.Hned jsem nepochopil co je špatně.Dokud jsem neporovnal velikost původního souboru s ta teoretická co tam měla být kdyby nebyla paleta Rozdíl se ukázal přesně 1KB (přesně 1024 bajtů).Paleta tam byla.Nikdy proto nepočítejte s tím jestli paletka existuje a nespoléhejte na její velikost (ačkoli všechny obrázky, na které jsem narazil, měly velikost palety 256 barev, neboli 1Kb), vždy se pohybujte souborem na začátek rastru pomocí bfOffBits. Paleta je pole RGBQUAD struktur navazujících za sebou. pokud nejsou v paletě použity všechny barvy (ale například jen 16), pak je pro paletu často ještě přiděleno 256 polí. A 256 * 4 = 1024, kde 4 je velikost struktury RGBQUAD, tj. získá se stejný jeden kilobajt.

Hned po paletě přichází na řadu samotný rastr. Tady jsou věci ještě zmatenější. Nejprve jsou zde popsány pixely, jak je uvedeno v tabulce výše, v závislosti na formátu. A mohou samy obsahovat hodnotu barevných složek (u těch bez palet), nebo to mohou být indexy pole palet. Samotný snímek je zaznamenán řádek po řádku. Za druhé, obrázek se zdá být vzhůru nohama. To znamená, že se nejprve píše spodní řádek, pak předposlední řádek a tak dále až úplně nahoru. A za třetí, jak je napsáno v, pokud velikost rastrového řádku není násobkem 4, pak se doplní 1 až 3 prázdnými (nulovými) bajty, takže délka řádku je násobkem odstavce. To je ta nejnepříjemnější věc. Faktem je, že pro každý formát musíte upravit tento počet prázdných bajtů (i když rád tam píšu část palety, jen nechci vytvářet extra „nulové“ proměnné, pokud se tyto bajty stejně přeskakují a nikdo potřebuje je). Poskytuji tabulku se vzorci, které ukazují, pro který formát, kolik bajtů by se mělo přidat na konec řádku. Tam proměnná Width, jak asi tušíte, znamená šířku obrázku. Všechny tyto vzorce byly stanoveny experimentálně. Uvedu příklad pouze pro nejpoužívanější formáty. Zbytek si můžete napsat sami.

Ukázkové programy

Všechny zdroje si můžete stáhnout, nebudu sem moc psát. Funkce uvedu jen s komentářem.

Dobrý den 1. Vytvoření obrázku ve formátu bmp.
Zde se vytvoří monochromatický obraz. Existují tři příklady takových funkcí: vytváření bmp 8, 16 a 24 bitů. Dám pouze za 16bit.

// Vytvořme obrázek ve formátu bmp 16 bitů jako 5-5-5, který bude jednoduše monochromatický
void CreateBmp555(char * fname, barva WORD)
{
HANDLE hFile;
DWORD RW;
int i, j;

// Deklarujte potřebné struktury
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
Paleta BYTE[1024]; // Paleta

// Mějme obrázek 35 x 50 pixelů
int Šířka = 35 ;
int Výška = 50 ;

memset(Paleta, 0, 1024); // V paletce máme nuly, vyplňte je
memset (&bfh, 0 , sizeof (bfh) );

Bfh.bfType = 0x4D42 ; // Označme, že toto je bmp "BM"
bfh.bfOffBits = sizeof (bfh) + sizeof (bih) + 1024 ; // Paletka zabírá 1Kb, ale nevyužijeme ji
bfh.bfSize = bfh.bfOffBits +
sizeof (barva) * Šířka * Výška +
Výška * ((velikost (barva) * Šířka) % 4 ) ; // Vypočítejte velikost výsledného souboru
memset (&bih, 0 , sizeof (bih) );
bih.biSize = sizeof(bih); // Tak to má být
bih.biBitCount = 16 ; // 16 bitů na pixel
bih.biClrUsed = 32768; // Používáme 5-5-5
bih.biCompression = BI_RGB; // Bez komprese
bih.biHeight = Výška;
bih.biWidth = Šířka;
bih.biPlanes = 1 ; // Mělo by být 1
// A zbývající pole zůstanou 0

HFfile = CreateFile(jméno, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
vrátit se ;

// Napište záhlaví
WriteFile (hFile, & bfh, sizeof (bfh) , & RW, NULL );
WriteFile (hFile, & bih, sizeof (bih) , & RW, NULL );

// Napište paletu
WriteFile(hFile, Paleta, 1024, &RW, NULL);
pro (i = 0; i< Height; i++ )
{
pro (j = 0; j< Width; j++ )
{
WriteFile (hFile, & color, sizeof (color) , & RW, NULL ) ;
}

// Zarovnat s okrajem
WriteFile (hFile, Palette, (sizeof (color) * Width) % 4 , & RW, NULL ) ;
}
CloseHandle(hFile) ;
}

barva - barva obrázku. Hodnotu této proměnné je nutné vyplnit podle první tabulky. Výsledný obrázek si můžete prohlédnout například v ACDSee. Zrovna jsem to zkusil otevřít ve Photoshopu, ale ukázalo se, že je v tomto formátu neumí přečíst. Ale můžete :).

Příklad 2. Převod obrázku z 8bitového formátu (256 barev) na 24bitový.

BOOL Convert256To24 (char * fin, char * fout)
{
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
int Šířka, Výška;
Paleta RGBQUAD[ 256 ] ;
BYTE * inBuf;
RGBTRIPLE * outBuf;
RUKOJEŤ hIn, hOut;
DWORD RW;
DWORD OffBits;
int i, j;

HIn = CreateFile (fin, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL) ;
if (hIn == INVALID_HANDLE_VALUE)
návrat FALSE;

Hout = CreateFile(fout, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if (hOut == INVALID_HANDLE_VALUE)
{
CloseHandle(hIn);
návrat FALSE;
}

// Přečtěte si data
ReadFile (hIn, & bfh, sizeof (bfh) , & RW, NULL );
ReadFile (hIn, & bih, sizeof (bih) , & RW, NULL );
ReadFile (hIn, Palette, 256 * sizeof (RGBQUAD) , & RW, NULL );

// Nastaví ukazatel na začátek rastru
SetFilePointer (hIn, bfh.bfOffBits, NULL, FILE_BEGIN) ;
Width = bih.biWidth ;
Výška = bih.biVýška ;
OffBits = bfh.bfOffBits ;

// Přidělení paměti
inBuf = new BYTE [ Width ] ;
outBuf = new RGBTRIPLE [ Width ] ;

// Vyplňte záhlaví
bfh.bfOffBits = sizeof (bfh) + sizeof (bih) ; // Nepišme paletu
bih.biBitCount = 24 ;
bfh.bfSize = bfh.bfOffBits + 4 * Šířka * Výška + Výška * (Šířka % 4 ) ; // Velikost souboru

// A zbytek zůstává nezměněn
// Napište záhlaví
WriteFile (hOut, & bfh, sizeof (bfh) , & RW, NULL );
WriteFile (hOut, & bih, sizeof (bih) , & RW, NULL );

// Začněme převádět
pro (i = 0; i< Height; i++ )
{
ReadFile(hIn, inBuf, Width, & RW, NULL);
pro (j = 0; j< Width; j++ )
{
outBuf[ j].rgbtRed = Paleta[ inBuf[ j] ] .rgbRed ;
outBuf[ j].rgbtGreen = Palette[ inBuf[ j] ] .rgbGreen ;
outBuf[ j].rgbtBlue = Palette[ inBuf[ j] ] .rgbBlue ;
}
WriteFile (hOut, outBuf, sizeof (RGBTRIPLE) * Width, & RW, NULL ) ;

// Zapisování odpadků pro zarovnání
WriteFile (hOut, Palette, Width % 4 , & RW, NULL ) ;
SetFilePointer(hIn, (3 * šířka) % 4, NULL, FILE_CURRENT) ;
}

smazat inBuf;
smazat outBuf;
CloseHandle(hIn);
CloseHandle(hOut);
vrátit TRUE;
}

Názvy zdrojových a cílových souborů musí být předány funkci, resp.

BMP je oblíbený obrazový formát bez komprese dat. Podívejme se, jaké programy můžete použít k prohlížení obrázků s tímto rozšířením.

Pravděpodobně již mnozí uhodli, že protože se k zobrazení obrázků používá formát BMP, můžete si obsah těchto souborů prohlížet pomocí prohlížečů obrázků a grafických editorů. S tímto úkolem si navíc poradí i některé další aplikace, jako jsou prohlížeče a univerzální prohlížeče. Dále se podíváme na algoritmus pro otevírání souborů BMP pomocí specifického softwaru.

Metoda 1: Prohlížeč obrázků FastStone

Začněme oblíbeným prohlížečem obrázků FastStone Viewer.


Metoda 2: IrfanView

Nyní se podívejme na proces otevírání BMP v dalším oblíbeném prohlížeči obrázků IrfanView.


Metoda 3: XnView

Dalším prohlížečem obrázků, ve kterém se podíváme na otevření souboru BMP, je XnView.


Metoda 4: Adobe Photoshop

Nyní přejdeme k popisu algoritmu akcí pro řešení popsaného problému v grafických editorech, počínaje populární aplikací Photoshop.


Hlavní nevýhodou této metody je, že aplikace Photoshop je placená.

Metoda 5: Gimp

Dalším grafickým editorem, který umí zobrazit BMP, je Gimp.


Oproti předchozímu způsobu tato těží z toho, že aplikace Gimp za její používání nevyžaduje platbu.

Metoda 6: OpenOffice

S tímto úkolem se úspěšně vyrovná i grafický editor Draw, který je součástí bezplatného balíčku OpenOffice.


Metoda 7: Google Chrome

BMP umí otevřít nejen grafické editory a prohlížeče obrázků, ale také řada prohlížečů, například Google Chrome.


Metoda 8: Univerzální prohlížeč

Další skupinou programů, které umí pracovat s BMP, jsou univerzální prohlížeče, kam patří aplikace Universal Viewer.


Metoda 9: Malování

Metody pro otevření BMP pomocí programů nainstalovaných třetích stran byly uvedeny výše, ale Windows má svůj vlastní grafický editor - Malování.


Metoda 10: Windows Photo Viewer

Windows má také vestavěný prohlížeč pouze obrázků, který lze použít ke spuštění BMP. Podívejme se na příklad, jak to provést pomocí systému Windows 7.


Jak vidíte, existuje poměrně velký seznam programů, které umí otevřít obrázky BMP. A to nejsou všechny, ale pouze ty nejoblíbenější. Výběr konkrétní aplikace závisí na osobních preferencích uživatele a také na stanovených cílech. Pokud se potřebujete pouze podívat na kresbu nebo fotografii, je lepší použít prohlížeč obrázků a pro úpravy použijte editory obrázků. Navíc lze jako alternativu pro prohlížení použít i prohlížeče. Pokud uživatel nechce do počítače instalovat další software pro práci s BMP, může pro prohlížení a úpravu obrázků použít vestavěný software Windows.

Oznámení

Formát rastrového obrázku BMP

BMP (bitmapový soubor, formát bitmapového souboru nezávislý na zařízení) jsou bitmapové soubory používané k ukládání digitálních bitmapových obrázků odděleně od zobrazovacího zařízení. Tento typ souboru byl dříve používán v Microsoft Windows a OS/2. Termín "rastr" pochází z představy programátorů o bitmapě. Obrázky BMP jsou obvykle nekomprimované nebo bezztrátově komprimované (například pomocí ZIP nebo RAR - kvůli přítomnosti nadbytečných dat v souboru). Dnes je preferovaným formátem obrázků JPG – především kvůli velké velikosti souborů BMP, která může způsobit problémy nebo zpoždění při stahování, odesílání nebo nahrávání souborů.

Technické informace o souborech BMP

Soubory BMP se ukládají jako 2D obrázky různých velikostí, barev a barevných hloubek bez komprese dat, barevných profilů nebo alfa kanálů. Obrázky BMP jsou uloženy ve formátech bitmap nezávislých na zařízení (DIB), což znamená, že obrázek má barvy spíše než systémové specifikace. To vysvětluje, proč některé obrázky BMP vypadají na různých počítačích odlišně. Obrázky BMP lze prohlížet na jakémkoli zařízení, včetně obrazovek počítače a televize. Nedostatek patentů způsobil, že se tento typ obrázku stal oblíbeným formátem pro širokou škálu zařízení.

Další informace o formátu BMP

Přípona souboru .bmp
Kategorie souboru
Příklad souboru (2,7 MiB)
(487,85 kB)
Související programy Adobe Photoshop
MS Paint
Microsoft Photo Editor
Štětec