Автор: Пользователь скрыл имя, 24 Марта 2012 в 23:20, курсовая работа
Мета курсової роботи – практичне закріплення, поглиблення та розширення знань та навичок, набутих у процесі вивчення мови програмування С. З цією метою було поставлено конкретну задачу: розглянути варіанти структур ВМР-формату, ознайомитись з поняттям палітри і її керуванням, алгоритмами стиснення, що застосовуються для ВМР-файлів і користуючись набутою теоретичною базою відтворити невелике зображення ВМР-формату в режимі 12h за допомогою засобів мови програмування С.
Вступ…………………………………………………………………………….4
1. Огляд літератури
1.1. Загальна характеристика ВМР-формату………………………….....5
1.2. Варіанти структур ВМР-формату……………………………………6
1.2.1. BITMAPFILEHEADER……………………………………………7
1.2.2. BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADER………………………………………………..8
1.2.3. Збереження даних у форматі BMP. Палітра……………………14
1.3. Типи стиснення даних у зображеннях BMP формату…………….16
1.3.1. Метод стиснення RLE8…………………………………………..17
1.3.2. Метод стиснення RLE4…………………………………………..18
1.4. Графіка в мові програмування С……………………………………19
2. Формулювання задачі………………………………………………………20
3. Опис алгоритму……………………………………………………………..21
3.1. Загальний алгоритм розв’язку………………………………………21
3.2. Блок-схема загального алгоритму програми ………………………23
4. Програмна реалізація алгоритму ………………………………………….25
5. Інструкція користувачеві програми ………………………………………27
6. Контрольні приклади та аналіз результатів їх реалізації…..…………….28
Висновок………………………………………………………………………..30
Список літератури .…………………………………………………………...31
Додатки…………………………………………………………………………32
Додаток 1. Код програми …………………………………………………32
Додаток 2. Зображення rainbow.bmp ………………
Програма працює в текстовому та графічному 12h режимах.
Здобуті навички можуть бути використані в подальшому удосконаленні даної програми для відображення зображень інших форматів, конвертації зображень з одного типу в інший, інвертування кольорів, створення власних зображень і т.д.
Список літератури
1. ВМР. - http://ru.wikipedia.org/wiki/
2. Bitmap Storage. - http://msdn.microsoft.com /en-us/library/dd183391(VS.85)
3. Описание формата ВМР. - http://jenyay.net/Programming/
4. Graphics in C language. - http://www.mycplus.com/
5. Миано Дж. Форматы и алгоритмы сжатия зображений в действии – М.: Издательство Триумф, 2003 – 336 с.: ил.
Додаток 1
Код програми
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <math.h>
#include <string.h>
void OpenGraph();
/********* bmp structure anouncement **********/
/********* ogoloshennja stryktyr bmp **********/
typedef struct header{ //zagolovna stryktyra
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BMPFILEHEADER;
typedef struct info { //informacijna stryktyra
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BMPINFOHEADER;
typedef struct palette { //palitra
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGB;
int main (int argc, char ** argv)
{
clrscr();
FILE *file;
char fname[50];
BMPFILEHEADER bmpfh;
BMPINFOHEADER bmpih;
RGB rgb[255];
int col,m,color;
randomize();
color=random(6)+1;
textcolor(color);
/******* opening file **********/
/******* vidkruttja fajly **********/
if (argc==1) { //jakso imja fajly ne zadane z kom. rjadka
gotoxy(10,10);
cprintf("Enter file name: " );
gets(fname); //vvedennja imja v programi
puts("");
}
else
strcpy(fname,argv[1]);
file=fopen(fname,"rb");
if(file==NULL) {
cprintf("Error opening file");
getch();
return 1;
}
/****** reading file into structures *******/
/****** zapus z fajla v stryktyru *******/
fread(&bmpfh,sizeof(bmpfh),1,
gotoxy(16,12);
cprintf("Type of file - BMP;");
gotoxy(16,14);
cprintf("Size of file - %ld bytes;\n",bmpfh.bfSize);
fread(&bmpih,sizeof(bmpih),1,
gotoxy(16,16);
cprintf("Width of image - %ld pixels", bmpih.biWidth);
gotoxy(16,18);
cprintf("Height of image - %ld pixels",bmpih.biHeight);
gotoxy(16,20);
cprintf("Bit for one pixel - %d",bmpih.biBitCount);
gotoxy(16,22);
cprintf("Number of colours - %.0lf", exp((double)bmpih.biBitCount*
/******* palette for 16-colored pixtures *******/
/******* palitra dlja 16-tu kolirnogo zobrazhennja *******/
if (bmpih.biBitCount==4) { //zapus palitru 16-tu koljoriv
col=15;
for(m=0;m<=col;m++) {
fread(&(rgb[m]),sizeof(rgb[m])
// printf("color %2d - %5d %5d %5d %5d\n",m,rgb[m].rgbBlue,rgb[m]
}
}
/****** palette for 256-colored pictures *****/
/****** palitra dlja 256-tu kolirnogo zobrazhennja *****/
if (bmpih.biBitCount==8) { //zapus palitru 256-tu koljoriv
col=255;
for(m=0;m<=col;m++) {
fread(&(rgb[m]),sizeof(rgb[m])
//printf("color %2d - %5d %5d %5d %5d\n",m,rgb[m].rgbBlue,rgb[m]
}
}
gotoxy(10,24);
cprintf("Press Enter to view the image:");
getch();
/***** opening graphic mode *****/
/***** vidkruttja grafichnogo regumy *****/
OpenGraph();
/***** drawing an image *****/
/***** maljyvannja zobrazhennja *****/
/***** for 16-colored pictures *****/
/***** dlja 16-tu kolirnogo *****/
if(bmpih.biBitCount==4) {
short int pix=0,c=0,n=0;
int x,y,rivn;
rivn=(3*bmpih.biWidth)%8; //vurivnjyvannja, jaksho rozmir ne kratnuj 4
for(y=(bmpih.biHeight);y!=0;y-
for(x=0;x<(bmpih.biWidth)+
c=0;n=0;
fread(&pix,1,1,file);
c=(pix>>4); //pershuj pixel
n=(pix&(0x0f)); //dryguj pixel
/* invertuvannja koljoriv */
if(c==7) c=8; else if(c==8) c=7;
if(c==3) c=6; else if(c==6) c=3;
if(c==1) c=4; else if(c==4) c=1;
if(c==9) c=12; else if(c==12) c=9;
if(c==11) c=14; else if(c==14) c=11;
if(n==3) n=6; else if(n==6) n=3;
if(n==1) n=4; else if(n==4) n=1;
if(n==8) n=7; else if(n==7) n=8;
if(n==9) n=12; else if(n==12) n=9;
if(n==11) n=14; else if(n==14) n=11;
putpixel(x+(319-(bmpih.
putpixel(x+(319-(bmpih.
}
}
}
/***** for 256-colored pictures *****/
/***** dlja 256-tu kolirnogo *****/
if(bmpih.biBitCount==8) {
char pix;
int x,y,rivn;
rivn=(3*bmpih.biWidth)%4; //vurivnjyvannja,jaksho rozmir ne kratnuj 4
for(y=(bmpih.biHeight);y!=0;y-
for(x=0;x<(bmpih.biWidth)+
fread(&pix,1,1,file);
putpixel(x+(319-(bmpih.
}
}
}
getch();
closegraph(); //zakruttja grafichnogo rezhumy
fclose(file); //zakruttja faily
return 0;
}
/***** function to open graphic mode ******/
/***** fynkcija vidkruttja grafichnogo rezhumy ******/
void OpenGraph()
{
int graphdr=DETECT,graphmode,
initgraph(&graphdr, &graphmode,"C:\\BORLANDC\\BGI"
error=graphresult();
if(error!=grOk) {
printf("Error opening graphic mode: %s\n", grapherrormsg(error));
printf("Press any key: ");
getch();
exit(1);
}
}
Додаток 2
Зображення rainbow.bmp
40
Информация о работе Відтворення графічних зображень з файлів ВМР-формату