Відтворення графічних зображень з файлів ВМР-формату

Автор: Пользователь скрыл имя, 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 ………………

Работа содержит 1 файл

Курсак.doc

— 338.50 Кб (Скачать)

Програма працює в текстовому та графічному 12h режимах.

Здобуті навички можуть бути використані в подальшому удосконаленні даної програми для відображення зображень інших форматів, конвертації зображень з одного типу в інший, інвертування кольорів, створення власних зображень і т.д.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список літератури

 

1.      ВМР. - http://ru.wikipedia.org/wiki/BMP

2.      Bitmap Storage. - http://msdn.microsoft.com /en-us/library/dd183391(VS.85).aspx

3.      Описание формата ВМР. - http://jenyay.net/Programming/Bmp

4.      Graphics in C language. - http://www.mycplus.com/tutorials/c-programming-tutorials/graphics-programming/

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,file);  //zapus v zagolovny stryktyry

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,file);  //zapus v informacijny stryktyry

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*log(2)));

 

 

 

/*******      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]),1,file);

      // printf("color %2d - %5d  %5d  %5d  %5d\n",m,rgb[m].rgbBlue,rgb[m].rgbGreen,rgb[m].rgbRed,rgb[m].rgbReserved);

    }

}

 

 

/******      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]),1,file);

       //printf("color %2d - %5d  %5d  %5d  %5d\n",m,rgb[m].rgbBlue,rgb[m].rgbGreen,rgb[m].rgbRed,rgb[m].rgbReserved);

 

    }

}

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)+rivn;x+=2) {

                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.biWidth/2)),y+(239-(bmpih.biHeight/2)),c);

                putpixel(x+(319-(bmpih.biWidth/2))+1,y+(239-(bmpih.biHeight/2)),n);

       }

    }

}

 

 

/***** 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-=1)  {

       for(x=0;x<(bmpih.biWidth)+rivn;x++) {

                fread(&pix,1,1,file);

                putpixel(x+(319-(bmpih.biWidth/2)),y+(239-(bmpih.biHeight/2)),pix);

       }

    }

}

 

 

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,error;

 

    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

 



Информация о работе Відтворення графічних зображень з файлів ВМР-формату