Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
|
strprg:projekty:bmp [05. 03. 2014, 15.41] lookin vytvořeno |
strprg:projekty:bmp [20. 03. 2014, 14.24] (aktuální) |
||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| ====== Projekt čtečka BMP souborů ====== | ====== Projekt čtečka BMP souborů ====== | ||
| + | Dostali jsme úkol vytvořit čtečku BMP souborů. | ||
| + | Program má ve své rané, ovšem <del>nejspíše poslední</del> 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: | ||
| + | <code c> | ||
| + | #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; | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | Vysvětlení: | ||
| + | <code c> | ||
| + | #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; | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | * 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], <del>museli bychom ale potom spouštět funkci fread() dvakrát</del> - 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éž. | ||