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í:
Zde je celý zdrojový kód programu:
#include <stdio.h> #include <stdlib.h> 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 <stdio.h> #include <stdlib.h> 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éž.