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éž. |