====== Projekt čtečka BMP souborů ======
Dostali jsme úkol vytvořit čtečku BMP souborů.
Program má ve své rané, ovšem nejspíše poslední fázi, neboť je určen spíše pro začátky programování s bitmapovými soubory, jen několik málo funcí:
- Načíst soubor ze složky, ve které se program nachází.
- Přečíst první dva byty z tohoto souboru.
- Pomocí 1. a 2. zkontrolovat, jestli je soubor skutečně bitmapa.
Zde je celý zdrojový kód programu:
#include
#include
int main(int argc, char *argv[])
{
char type[2];
FILE * file;
file = fopen("lenna.bmp", "rb");
if (file == NULL){
printf("Zadnej soubor.\n");
system("PAUSE");
return 1;
}
fread(type, 1, 2, file);
if (type[0]!='B' || type[1]!='M'){
printf("Neni bitmapa.\n");
system("PAUSE");
return 2;
}
printf("Je to bitmapa.");
system("PAUSE");
return 0;
}
Vysvětlení:
#include
#include
int main(int argc, char *argv[])
{
char type[2]; //vytvoříme proměnnou, do které budeme načítat první dvě písmena (byty) z dotyčné bitmapy.
FILE * file; //vytvoříme proměnnou, do které budeme načítat námi oblíbený soubor.
file = fopen("lenna.bmp", "rb"); //do proměnné načteme soubor*
if (file == NULL){ //kontrola, jestli soubor vůbec existuje
printf("Zadnej soubor.\n");
system("PAUSE");
return 1;
}
fread(type, 1, 2, file); //do proměnné type[] přiřazujeme první dva byty**
if (type[0]!='B' || type[1]!='M'){ //zkontrolujeme, jestli první dva znaky načtené do type sedí
printf("Neni bitmapa.\n");
system("PAUSE");
return 1;
}
printf("Je to bitmapa."); //jestliže se algoritmus dostane do tohoto bodu, obrázek je bitmapa. ZÁZRAK
system("PAUSE");
return 0;
}
----
* funkce fopen() funguje následovně:
fopen("umístění/název souboru", "režim");
Režim sděluje programu, jakým způsobem chceme soubor zneužít.
3 typy režimů:
w (write = psát) - přepíše celý soubor
a (append = přidat) - píše na konec souboru
r (read = číst) - pouze čte soubor
Pokud za písmenko režimu napíšeme b (tedy např.: rb), bude program se souborem pracovat v binárním režimu.
%%**%% funkce fread() funguje následovně:
fread(ukazatel proměnné - do níž ukládáme, po kolika bytech, kolikrát, proměnná souboru);
Pokud tedy napíšeme fread(type, 1, 2, file); program umístí do každého políčka proměnné **type** po **1** bytu **2**-krát. Načítat bude z pole **file**. !!!**POZOR**!!! Kdyby type nebylo vícemístné pole, musíme psát před proměnnou & - je to ukazatel. V předchozí situaci bychom mohli napsat i &type[0], museli bychom ale potom spouštět funkci fread() dvakrát - nemuseli, funkce fread dostane tentýž ukazatel, byť tentokrát ne ve významu //ukazatel na pole// ale ve významu //ukazatel na první políčko//. To je ale totéž.