Laboratorium 3
Zadanie 1:
Zawartość dowolnego pliku tekstowego wyświetlić na konsoli. Ścieżkę dostępu do pliku należy pobrać od użytkownika.
Zadanie 2:
Napisać funkcję do obliczania rozmiaru plików. Jako argument funkcja powinna przyjmować ścieżkę dostępu lub wskaźnik do pliku.
Zadanie 3:
Napisać program do kopiowania plików tekstowych. Program powinien oczekiwać na podanie ścieżki dostępu do pliku źródłowego i pliku docelowego.
Zadanie 4:
Zmodyfikować program z Zadania 3 tak, aby kopiowanie odbywało się od końca pliku (ostatni znak pliku źródłowego powinien być pierwszym znakiem pliku docelowego). W programie umieścić funkcję kopiującą, przyjmującą jako argumenty ścieżki do plików: źródłowego i docelowego.
Zadanie 5:
Dana jest funkcja postaci:
2sin x
dla
−1 < x ≤ 0
2 x + x
f ( x) =
3
dla 0 < x < 10
( x + )(
1 x + 2)
2
x + 5
dla
x ≤ −1 lub
x ≥
10
Napisać program, do tablicowania powyższej funkcji na przedziale < a, b > podanym przez użytkownika. Wyniki należy zapisać do pliku w dwóch kolumnach.
Zadanie dodatkowe
Napisać program do kopiowania plików w formacie *.bmp.
Funkcje potrzebne do wykonania zadań: fopen(), fclose(), fprintf(), fscanf(), fread(), fwrite(), fseek(), ftell(), feof(), putc(), getc(). Plik nagłówkowy: stdio.h
Katedra Informatyki Stosowanej PŁ
dr inż. Anna Fabijańska
Opis formatu BMP
BMP jest jednym z formatów plików danych z grafiką bitmapową. Opracowany pierwotnie jako natywny dla systemu OS/2, wykorzystywany później także w interfejsach systemów z rodziny Microsoft Windows, jednak dostępny jako format przechowywania danych również na wszystkich pozostałych platformach. Zawiera w sobie prostą kompresje bezstratną RLE (która nie musi być użyta) oraz informację o użytych kolorach. Obsługuje tylko tryb RGB.
Rys.1. Struktura bitmapy
Plik w formacie BMP składa się z następujących elementów (rys. 1):
•
nagłówek pliku;
•
nagłówek obrazu;
•
opcjonalnie paleta RGB (tablica kolorów);
•
dane obrazowe.
Nagłówek pliku, stanowi struktura BITMAPFILEHEADER (Tabela 1), która spełnia rolę sygnatury identyfikującej format pliku.
Tabela 1. Budowa nagłówka bitmapy.
Nazwa
Rozmiar (bajty)
Opis
bfType
2
Sygnatura pliku, zawsze przyjmuje wartość BM
bfSize
4
Długość całego pliku w bajtach
bfReserved1
2
Pole zarezerwowane zwykle ma wartość 0
bfReserved2
2
Pole zarezerwowane zwykle ma wartość 0
bfOffBits
4
Pozycja danych obrazowych w pliku
Bezpośrednio po nagłówku następuje nagłówek obrazu. W przypadku formatu kompatybilnego rodziną systemów Windows, stanowi go struktura BITMAPINFOHEADER
(Tabela 2).
Tabela 2 Budowa nagłówka bitmapy.
Nazwa
Rozmiar (bajty)
Opis
biSize
4
Wielkość nagłówka informacyjnego
biWidth
4
Szerokość obrazu pikselach
biHeight
4
Wysokość obrazu w pikselach
biPlanes
2
Liczba płatów (musi być 1)
biBitCount
2
Liczba bitów na piksel: 1,4,8,16,24 lub 32
biCompression
4
Algorytm kompresji: BI_RGB=0, BI_RLE8=1, BI_RLE4=2, BI_BITFIELDS=3
biSizeImage
4
Rozmiar samego rysunku
biXpelsPerMeter
4
Rozdzielczość pozioma
biYpelsPerMeter
4
Rozdzielczość pionowa
biCrlUses
4
Liczba kolorów w palecie
biCrlImportant
4
Liczba ważnych kolorów w palecie.
Katedra Informatyki Stosowanej PŁ
dr inż. Anna Fabijańska
Paleta (tablica) kolorów występuje bezpośrednio po części nagłówkowej (zazwyczaj zajmującej łącznie 54 bity), a jej format zależy od typu bitmapy, tj. od ilości bitów, przeznaczonych do zakodowania jednego piksela. W przypadku bitmap 1, 4 i 8 bitowych, kompatybilnych z systemami z rodziny Windows, paletę barw stanowi 2bpp – elementowa tablica struktur RGBQUAD postaci:
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;}
RGBQUAD;
Wartość piksela jest indeksem elementu palety barw, opisującej za pomocą trójki składowych RGB jego kolor.
Wynikowy kolor nie zawsze jednak jest kolorem wynikającym z mapowania pikseli. W
przypadku bitmap 16 i 32 bitowych, z wartością pola biCompression w strukturze BITMAPINFOHEADER ustawioną na BI_BTFIELDS, w miejscu tablicy struktur RGBQUAD, występuje tablica trzech, czterobajtowych liczb całkowitych. Te trzy wartości są maskami, określającymi bity określające odpowiednio wartości RGB.
Obrazy 24 – bitowe, jak również 16, i 32 - bitowe, w których nagłówku pole biCompression ma wartość różną od BI_BITFIELDS nie posiadają palety barw.
Ostatnim komponentem plików w formacie BMP są dane obrazowe, czyli piksele. Ich położenie w stosunku do końca struktury BITMAPFILEHEADER, określone jest wartością pola bfOffBits w nagłówku pliku.
Piksele ułożone są rzędami w kolejności od dołu do góry. Ilość rzędów, jak również
pikseli w rzędzie określona jest odpowiednio wartościami pól biHeight oraz biWidth. Rozmiar rzędu jest zdeterminowany przez wartości pól biBitCount i biWidth. Ilość pikseli w jednym rzędzie jest zaokrąglana do najbliższej całkowitej wielokrotności liczby 4.
Format danych obrazowych zależy od ilości bitów przeznaczonych do zakodowania jednego piksela:
•
1 bpp
bajt jest dzielony na 8 części, (po jednym bicie) przy czym wartość z każdej części jest indeksem do elementu w palecie barw;
•
4 bpp
bajt jest dzielony na 2 części, (po cztery bity) przy czym wartość z każdej części jest indeksem do elementu w palecie barw;
•
8 bpp
każdy piksel jest reprezentowany przez 1 bajt, którego wartość jest indeksem do elementu w palecie barw;
•
16 bpp
każdy piksel jest reprezentowany przez 2-bajtową liczbę całkowitą. Jeśli wartość pola biCompression
w
nagłówku
BITMAPINFOHEADER
posiada
wartość
BI_RGB
(0),
intensywność każdego koloru, jest reprezentowana przez 5 bitów (nieużywany jest wtedy bit najbardziej znaczący); jeżeli natomiast wartość pola biCompression ustawiona jest na BI_BITMAP, 4- bajtowe maski bitowe, określają wartości każdego z komponentów RGB;
•
24 bpp
każdy piksel opisany jest poprzez 3 kolejne bajty, określające kolejno wartości składowych RGB (odwrotnie niż w większości formatów graficznych);
•
32 bpp
każdy piksel reprezentowany jest przez 4 – bajtową liczbę całkowitą analogicznie jak w przypadku bitmap 24 bitowych, z dodatkowym niewykorzystanym bajtem na końcu.
Katedra Informatyki Stosowanej PŁ
dr inż. Anna Fabijańska