Програма запису і перегляду графічних BMP-файлів

BMP як формат зберігання растрових зображень, огляд структури файлу. Створення програми для запису та перегляду графічних BMP-файлів на мові програмування Turbo Pascal 7.0, розробка функціональної схеми і алгоритмів, особливості проведення тестування.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 12.06.2011
Размер файла 325,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

2

Размещено на http://www.allbest.ru/

2

Размещено на http://www.allbest.ru/

Зміст

  • Вступ
  • 1. Постановка задачі
  • 2. Теоретичні відомості
    • 2.1 Огляд структури файлу
    • 2.2 BITMAPFILEHEADER
    • 2.3 Поле заголовку файлу
    • 2.4 Палітра
    • 2.5 Дані зображення
    • 2.6 Бітність зображення
    • 2.7 Індексовані кольори
  • 3. Проектування
    • 3.1 Розробка функціональної схеми
    • 3.2 Розробка алгоритмів
  • 4. Програмування
    • 4.1 Бібліотека програміста
    • 4.2 Основна програма
    • 4.3 Інструкція програміста
  • 5. Тестування
  • Висновки
  • Перелік посилань
  • Додаток А. Інструкція користувача
    • А.1. Вступ
    • А.2. Вимоги до системи
    • А.3. Використання програми
    • А.4. Функціональні клавіши
  • Додаток Б. Текст програми

графічний файл растровий зображення

Вступ

В еру комп'ютерних технологій отримали свій розвиток різноманітні формати графічних файлів. Одним з таких форматів є формат ВМР. Його основною перевагою є досить чітке і якісне зображення, а основним недоліком - значний об'єм файлів.

З форматом BMP працює величезна кількість програм, так як його підтримка інтегрована в операційні системи Windows і OS/2. Файли формату BMP можуть мати розширення. bmp,. dib і. rle. Крім того, дані цього формату включаються в двійкові файли ресурсів RES і у PE-файли.

Глибина кольору в даному форматі може бути 1, 2, 4, 8, 16, 24, 32, 48 біт на піксел, максимальні розміри зображення 65535 Ч 65535 пікселів. Проте, глибина 2 біт офіційно не підтримується.

У форматі BMP є підтримка стиснення за алгоритмом RLE, однак тепер існують формати з більш сильним стисненням, і з-за великого обсягу BMP рідко використовується в Інтернеті, де для стиснення без втрат використовуються PNG і старіший GIF.

Метою даного курсової роботи є створення програми для запису та перегляду графічних BMP-файлів на мові програмування Turbo Pascal 7.0. За допомогою створеної програми можна навчати студентів молодших курсів та школярів старших класів основам програмування.

1. Постановка задачі

Тема: «Програма запису і перегляду графічних BMP-файлів»

Мета роботи: написання програми, яка здатна записувати і відтворювати BMP-файлів, використовуючи отримані знання мови Turbo Pascal.

Проаналізувавши тему формату BMP-файлу і вивчивши популярні програми перегляду графічних файлів, були висунуті наступні основні вимоги до програми такого роду:

* Зручність введення інформації про BMP-файлі;

* Наявність головного меню програми (з пунктами «Файл», «Работа с изображениям», «Помощь»);

* Швидка робота алгоритму виведення графіки на екран;

* Приємний і зручний інтерфейс.

2. Теоретичні відомості

BMP (від англ. Bitmap Picture) - формат зберігання растрових зображень. Спочатку формат міг зберігати тільки апаратно-залежні растри (англ. Device Dependent Bitmap, DDB), але з розвитком технологій відображення графічних даних формат BMP став переважно зберігати апаратно-незалежні растри (англ. Device Independent Bitmap, DIB).

З форматом BMP працює величезна кількість програм, так як його підтримка інтегрована в операційні системи Windows і OS / 2. Файли формату BMP можуть мати розширення. bmp,. dib і. rle. Крім того, дані цього формату включаються в двійкові файли ресурсів RES і у PE-файли.

Глибина кольору в даному форматі може бути від 1 до 48 біт на піксель, максимальні розміри зображення 65535 Ч 65535 пікселів.

У форматі BMP є підтримка стиснення за алгоритмом RLE, однак тепер існують формати з більш сильним стисненням, і з-за великого обсягу BMP рідко використовується в Інтернеті, де для стиснення без втрат використовуються PNG і старіший GIF.

2.1 Огляд структури файлу

BMP-файл складається з чотирьох частин:

1. Заголовок файлу (BITMAPFILEHEADER);

2. Заголовок зображення (BITMAPINFOHEADER, може бути відсутнім). BITMAPV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP);

3. Палітра (може бути відсутнім);

4. Саме зображення.

2.2 BITMAPFILEHEADER

Ця структура містить інформацію про тип, розмір і подання даних у файлі.

typedef struct tagBITMAPFILEHEADER

{ WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

} BITMAPFILEHEADER, * PBITMAPFILEHEADER;

Тип «WORD» повинен мати розмір 16 біт, типи «DWORD» і «LONG» - 32 біта, порядок байтів мається на увазі little endian.

* bfType - тип файлу, символи BM.

* bfSize - розмір файлу в байтах.

* bfReserved1 і

* bfReserved2 - зарезервовані, містять нулі.

* bfOffBits - містить зсув в байтах від початку структури BITMAPFILEHEADER до безпосередньо бітів зображення.

2.3 Поле заголовку файлу

BITMAPINFOHEADER

Найбільш простий варіант заголовка. Програми для Windows NT3.51 і більш ранніх можуть використовувати тільки цю структуру.

typedef struct tagBITMAPINFOHEADER {

DWORD biSize;

LONG biWidth;

LONG biHeight;

WORD biPlanes;

WORD biBitCount;

DWORD biCompression;

DWORD biSizeImage;

LONG biXPelsPerMeter;

LONG biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

} BITMAPINFOHEADER, * PBITMAPINFOHEADER;

* biSize - розмір структури в байтах.

* biWidth - ширина зображення в пікселях. Для Win98/Me і Win2000/XP: якщо поле biCompression містить BI_JPEG або BI_PNG, тут вказана ширина розпакованого зображення.

* biHeight - висота зображення в пікселях. Якщо містить невід'ємні значення - зображення записано в порядку знизу вгору, нульовий піксель в нижньому лівому кутку. Якщо значення негативне - зображення записано зверху вниз, нульовий піксель у верхньому лівому куті зображення. Поле biCompression повинно містити значення BI_RGB або BI_BITFIELDS. Таке зображення не може бути стисло.

* biPlanes - містить одиницю.

* biBitCount - вказує кількість біт на піксель.

2.4 Палітра

Палітра може містити послідовність чотирьохбайтові полів за кількістю доступних кольорів (256 для 8-бітного зображення). Три молодші байти кожного поля визначають інтенсивність червоної, зеленої та синьої компоненти кольору, старший байт не використовується. Кожен піксель зображення описаний в такому випадку одним байтом, що містить номер поля палітри, в якому збережений колір цього пікселя.

Якщо піксель зображення описується 16-бітним числом, палітра може зберігати три двобайтових значення, кожне з яких ії маску для вилучення із 16-бітного пікселя червоною, зеленою і синій компонент кольору.

Файл BMP може не містити палітри, якщо в ньому зберігається нестиснене повнокольорове зображення.

2.5 Дані зображення

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

У bmp файли з глибиною кольору 24 біта, байти кольору кожного пікселя зберігаються в порядку BGR (Blue, Green, Red)

B bmp файли з глибиною кольору 32 біта, байти кольору кожного пікселя зберігаються в порядку BGRA (Blue, Green, Red, Alpha)

2.6 Бітність зображення

У залежності від кількості експонованих квітів, на кожну точку відводиться від 1 до 48 бітів:

* 1 біт - монохромне зображення (два кольори).

* 2 біти - 4 можливих кольору (режими роботи CGA).

* 4 біта - 16-кольорове зображення (режими роботи EGA).

* 8 біт (1 байт) - 256 кольорів, останній з режимів, які підтримували індексовані кольори (див. нижче).

* 16 біт (2 байти) - режим HiColor, 65536 можливих відтінків.

* 24 біта (3 байти) - TrueColor. У зв'язку з тим, що 3 байти не дуже добре співвідносяться з ступенями двійки (особливо при зберіганні даних в пам'яті, де вирівнювання даних по межі слова має значення), замість нього часто використовують 32-бітове зображення. У режимі TrueColor на кожен з трьох каналів (в режимі RGB) відводиться по 1 байту (256 можливих значень), загальна кількість кольорів дорівнює 16777216.

* 32 біт (4 байта) - цей режим практично аналогічний TrueColor, четвертий байт зазвичай не використовується, або в ньому розташовується альфа-канал (прозорість).

* 48 біт (6 байт) - рідко використовуваний формат з підвищеною точністю передачі кольору, підтримується відносно малою кількістю програм і обладнання.

2.7 Індексовані кольори

При кількості біт від 1 до 8 на кожен піксель може використовуватися спеціальний режим індексованих кольорів. У цьому випадку число, відповідає кожному пікселю, вказує не на колір, а на номер кольору в палітрі. Завдяки використанню палітри є можливість адаптувати зображення до квітів, присутніх на зображенні. У такому випадку зображення обмежено не заданими кольорами, а максимальною кількістю одночасно використовуваних кольорів.

3. Проектування

3.1 Розробка функціональної схеми

Перед початком роботи над програмою спочатку потрібно створити функціональну схему програми, яка демонструє основні функції, що повинна виконувати програма. Ця схема показана на рисунку 3.1.

2

Размещено на http://www.allbest.ru/

2

Размещено на http://www.allbest.ru/

Рисунок 3.1 - Функціональна схема програми BMPINTER

3.2 Розробка алгоритмів

На рисунках 3.1-3.6 приведені відповідно алгоритми процедур: основної програми, процеду Header, FileNameNum, FileSaveNameNum, ViewBMP, SaveBMP.

2

Размещено на http://www.allbest.ru/

2

Размещено на http://www.allbest.ru/

Рисунок 3.1 - Алгоритм основної програми

Рисунок 3.2 - Алгоритм процедури Header

2

Размещено на http://www.allbest.ru/

2

Размещено на http://www.allbest.ru/

Рисунок 3.3 - Алгоритм процедури FileNameNum

2

Размещено на http://www.allbest.ru/

2

Размещено на http://www.allbest.ru/

Рисунок 3.4 - Алгоритм процедури FileSaveNameNum

Рисунок 3.5 - Алгоритм процедури ViewBMP

2

Размещено на http://www.allbest.ru/

2

Размещено на http://www.allbest.ru/

Рисунок 3.6 - Алгоритм процедури SaveBMP

4. Програмування

4.1 Бібліотека програміста

У цій роботі використовується модуль MY_UNIT.TPU, що містить процедуру ініціалізації графічного режиму. Також в цьому модулі є процедури побудови вікон інтерфейсу. В даній курсовій роботі до бібліотеки програміста увійшли такі процедури:

1. GraphInit;

2. FileError (filename: string);

3. RAMA (x, y, w, h : byte);

4. RAMAWindow (s: string; x, y, w, h : byte);

5. RamaWindowAlert (s: string; x, y, w, h : byte).

Тепер опишемо кожну з цих процедур.

1. Процедура GraphInit ініціалізує графічний режим Turbo Pascal, без якого неможлива робота з ВМР-файлами. Лістинг процедури приведений нижче, а алгоритм на рисунку 4.1.

{ Процедура "GraphInit" инициализирует графический режим Mode }

procedure GraphInit;

var Driver, Mode, Error:integer;

begin

Driver:=VGA; Mode:= 2; { Настройка графического драйвера }

InitGraph(Driver,Mode,''); { Инициализация графического режима }

Error:=GraphResult; { Проверка правильности инициализации... }

if Error<>grOK then

begin { ...в случае ошибки - выход }

Writeln('Error!');

Halt

end

end; { "GraphInit" }

Рисунок 4.1 - Алгоритм процедури GraphInit

По краю намальованого цією процедурою вікна ставляться символи псевдографіки, і тоді ввід або вивід якої-небудь інформації по краю вікна стає неможливим.

2. Процедура FileError має 1 обов'язковий параметр: це параметр filename. Це є змінна типу string (тобто строкового типу), що зберігає введене ім'я файлу. Якщо користувач ввів ім'я файлу, що не існує, то процедура видасть повідомлення про помилку. Лістинг процедури приведений нижче.

{Процедура FileError сообщает о ошибке в введенном адресе поиска }

Procedure FileError (filename: string);

var

c: char;

Begin

RamaWindow ('Ошибка ввода\вывода', 15, 12, 50, 3);

GotoXY(2,2);

Write ('Файл <', filename,'> не существует');

c:=readkey;

c:=#0

End; { *** FileError *** }

3. Процедура RAMA будує рамку для строки вводу шляху до файлу. Має 4 параметри. х та y - це координати верхнього лівого кута рамки, w та h - її ширина та висота. Лістинг процедури приведений нижче, а алгоритм на рисунку 4.2.

{*********************************************

Процедура RAMA строит рамку для строки ввода.

x, y - координаты верхнего левого угла рамки,

w, h - е_ ширина и высота

********************************************}

Procedure RAMA (x, y, w, h : byte);

Const A=#201; B=#205; C=#187; D=#186; E=#200; F=#188; { Нужные символы }

Var i: byte;

begin

gotoXY (x-1,y-1); write (A);

for i:=x to x+w-1 do

write (B);

write (C);

for i:=y to y+h do

begin

gotoxy (x-1,i); write(D);

gotoxy (x+w,i); write(D);

end;

gotoxy (x-1,y+h); write(E);

for i:=x to x+w-1 do

write (B); write (F)

end; { *** RAMA *** }

Рисунок 4.2 - Алгоритм процедури RAMA

4. Процедура RAMAWINDOW будує рамку вказаного вікна та саме вікно. Має 5 параметрів. х та y - це координати верхнього лівого кута рамки, w та h - її ширина та висота, а s - заголовок вікна. Лістинг процедури приведений нижче, а алгоритм на рисунку 4.3.

{*****************************************************

Процедура RAMAWINDOW строит рамку указанного окна и само окно

x, y - координаты верхнего левого угла окна,

w, h - его ширина и высота,

s - заголовок окна

*****************************************************}

Procedure RAMAWindow (s: string; x, y, w, h : byte);

Const A=#201; B=#205; C=#187; D=#186; E=#200; F=#188; { Нужные символы }

Var i: byte;

begin

Window(1,1,80,25);

TextBackground (2);

TextColor (15);

gotoXY (x-1,y-1); write (A);

for i:=x to x+(w-3-length(s)) div 2 do

write (B);

Write (' ',s,' ');

for i:=x+(w-3-length(s)) div 2 + length(s) to x+w-4 do

write (B);

write (C);

for i:=y to y+h do

begin

gotoxy (x-1,i); write(D);

gotoxy (x+w,i); write(D);

TextBackground (0); write (' ');

TextBackground (2);

end;

gotoxy (x-1,y+h); write(E);

for i:=x to x+w-1 do

write (B);

write (F);

gotoxy (x+1,y+h+1); TextBackground (0);

for i:=x to x+w+1 do

write (' ');

window (x,y,x+w-1,y+h-1); { Созда_м окно для ввода }

TextBackGround (2);

ClrScr;

TextColor (15)

end; { *** RAMAWINDOW *** }

Рисунок 4.3 - Алгоритм процедури RAMAWINDOW

5. Процедура RAMAWINDOWALERT будує рамку вказаного вікна та саме вікно. Має такі ж параметри, що і процедура, але відрізняється тим, що виводиться тільки тоді, коли виникла помилка при роботі з ВМР-файлом. Лістинг процедури приведений нижче.

{******************************************************

Процедура RAMAWINDOWAlert строит рамку указанного окна и само окно

x, y - координаты верхнего левого угла окна,

w, h - его ширина и высота,

s - заголовок окна

*****************************************************}

Procedure RamaWindowAlert (s: string; x, y, w, h : byte);

Const A=#201; B=#205; C=#187; D=#186; E=#200; F=#188; { Нужные символы }

Var i: byte;

begin

Window(1,1,80,25);

TextBackground (4);

TextColor (15);

gotoXY (x-1,y-1); write (A);

for i:=x to x+(w-3-length(s)) div 2 do

write (B);

Write (' ',s,' ');

for i:=x+(w-3-length(s)) div 2 + length(s) to x+w-4 do

write (B);

write (C);

for i:=y to y+h do

begin

gotoxy (x-1,i); write(D);

gotoxy (x+w,i); write(D);

TextBackground (0); write (' ');

TextBackground (4);

end;

gotoxy (x-1,y+h); write(E);

for i:=x to x+w-1 do

write (B);

write (F);

gotoxy (x+1,y+h+1); TextBackground (0);

for i:=x to x+w+1 do

write (' ');

window (x,y,x+w-1,y+h-1); { Создаём окно для ввода }

TextBackGround (4);

ClrScr;

TextColor (15)

end; { *** RAMAWINDOWALERT *** }

Модуль не містить в своєму складі констант та змінних.

Всі описані процедури знаходяться у файлі MY_UNIT.TPU, а їх текст можна подивитись у файлі MY_UNIT.PAS.

4.2 Основна програма

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

1. GraphInit;

2. FileError;

3. RAMA;

4. RAMAWindow;

5. RamaWindowAlert;

6. Процедура Header;

7. Процедура FileNameNum;

8. Процедура FileSaveNameNum;

9. Процедура ViewBMP;

10. Процедура SaveBMP.

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

Використанні для рішення цієї задачі змінні представлені в таблиці 4.1., яка приведена нижче.

Таблиця 4.1 - Змінні, використані в програмі

Позначення

змінної

Тип змінної

Призначення змінної

bmpfile

string

Шлях початкового BMP-файлу

savefile

string

Шлях BMP-файлу, що зберігається

filled

Boolean

Логічна змінна, що визначає чи завантажений файл

Підпрограми, використані при рішенні задачі представлені в таблиці 4.2.

Таблиця 4.2 - Підпрограми

Назва підпрограми

Тип підпрограми

Розташування підпрограми

GraphInit

Процедура

MY_UNIT.TPU

FileError

Процедура

MY_UNIT.TPU

RAMA

Процедура

MY_UNIT.TPU

RAMAWindow

Процедура

MY_UNIT.TPU

RamaWindowAlert

Процедура

MY_UNIT.TPU

Процедура Header

Процедура

Знаходиться у самій програмі

Процедура FileNameNum

Процедура

Знаходиться у самій програмі

Процедура FileSaveNameNum

Процедура

Знаходиться у самій програмі

Процедура ViewBMP

Процедура

Знаходиться у самій програмі

Процедура SaveBMP

Процедура

Знаходиться у самій програмі

Також при написанні програми було використано такі стандартні процедури і функції, приведені в таблиці 4.3. Всі вони прописані в модулі CRT.

Таблиця 4.3 - Стандартні процедури і функції

Назва підпрограми

Тип підпрограми

Призначення

Write, Writeln

Процедура

Виводить на екран вказаний текст

Read, Readln

Процедура

Читає вказане користувачем значення і записує його в змінну

Readkey

Функція

Зчитує символ, що ввів користувач

GoToXY

Процедура

Переміщує курсор в позицію з координатами x, y

Assign

Процедура

Зв'язує файл з внутрішньою змінною

ReWrite

Процедура

Видаляє старий файл і створює новий пустий файл із таким же ім'ям

ClrScr

Процедура

Очищає екран і встановлює курсор в лівий і верхній кут вікна

Window

Процедура

Виводить на екран текстове вікно

TextColor

Процедура

Встановлює колір символу

TextBackGround

Процедура

Встановлює колір фону

4.3 Інструкція програміста

До набору, необхідного для компіляції програми і правильної її роботи входять наступні файли:

1. BMPINTER.PAS, де знаходиться текст самої програми.

2. Будь-який файл з розширенням ВМР.

3. Драйвер keyrus.com, за допомогою якого на екран виводяться російські символи.

4. MY_UNIT, де знаходяться процедури, використані в програмі.

Додатково до цього на дискету з усім необхідним буде додано файл MY_UNIT, в якому можна подивитись процедури використані в програмі, а також скомпільований файл BMPINTER.EXE для перегляду результату.

5. Тестування

Для демонстрації та тестування основних можливостей даної програми необхідно виконати наступні дії:

1. Вставте диск, доданий до курсової роботи, у дисковод.

2. Зайдіть на нього і запустіть файл BMPINTER.EXE, що знаходиться в папці BMPINTER\PROGRAM.

3. Ви побачите заставку програми (рисунок 4.1). Для продовження натисніть Enter. Вгорі вікна знаходиться головне меню програми. Для переміщення по ньому скористайтеся клавішами зі стрілками, а також клавішею Enter, для вибору пунктів меню. Для продовження потрібно завантажити BMP-файл.

Рисунок 5.1 - Заставка програми

4. Щоб завантажити BMP-файл потрібно вибрати пункт меню «Файл>Открыть BMP-файл ...». Після цього відкриється вікно (рисунок 4.2), в якому потрібно вказати шлях до файлу на жорсткому диску (наприкад, 4.BMP) і натиснути кнопку Enter.

Рисунок 5.2 - Вікно введення адреси BMP-файлу

5. Для відображення BMP-файлу потрібно вибрати пункт меню «Робота з зображенням> Показати BMP файл ». На екрані в графічному режимі буде виведений файл. Варто врахувати, що кольорова гама буде сильно стиснута, тому що колірна палітра графічного режиму Turbo Pascal може підтримувати максимум 16 кольорів.

6. Якщо вам сподобався малюнок, ви можете його зберегти. Для цього виберіть пункт меню «Файл> Сохранить BMP-файл ...». После цього відкриється вікно, аналогічне вікну завантаження (рисунку 5.3), в якому потрібно вказати шлях до файлу, що зберігається на жорсткому диску (наприклад, 4a.bmp) і натиснути кнопку Enter.

Рисунок 5.3 - Вибір шляху до зберігаємого BMP-файлу

7. Якщо під час перегляду графічного файлу ви просто хочете вийти, натисніть клавішу Escape, і ви опинитеся на екрані заставки.

8. Щоб вийти з програми, натисніть кнопку Escape або виберіть пункт «Файл> Вихід».

9. Також можна подивитися інформацію про програму. Для цього виберіть пункт меню «Помощь> О программе ...».

Висновки

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

Даний програмний продукт має наступні переваги:

1. Зручність введення інформації про BMP-файлі;

2. Наявність головного меню програми (з пунктами «Файл», «Работа с изображениями», «Помощь»), що дозволяє легше керувати нею;

3. Швидка робота алгоритму виведення графіки на екран;

4. Приємний і зручний інтерфейс.

При роботі програми були помічені наступні недоліки:

1. Для нормальної роботи програми слід вводити адресу 24-розрядно BMP-файлу. Програма налаштована на перегляд тільки цього формату.

2. Важливим обмеженням програми є те, що кольорова палітра вихідного файлу при виведенні на екран буде надмірно зжата в наслідок того, що графічний режим Turbo Pascal підтримує всього лише 16 кольорів.

На основі всього вище сказаного та основі плюсів і мінусів програми, можна зробити висновок, що були виконані основні задачі поставленого завдання.

Перелік посилань

1. ДСТУ 3008-95 Документація. Звіти в сфері науки і техніки. Структура і правила оформлення - Державний стандарт України.

2. ГОСТ 7.1-84 Библиографическое описание документа. Общие требования и правила составления.

3. Електронний ресурс: http://ru.wikipedia.org/wiki/BMP

4. Кнут Д. Искусство программирования для ЭВМ. Т.1,Основные алгоритмы. Пер. с англ. М:,Мир,1976

5. Кнут Д. Искусство программирования для ЭВМ. Т.2,Получисленные алгоритмы. Пер. с англ. М:,Мир,1977

6. Кнут Д. Искусство программирования для ЭВМ. Т.3,Сортировка и поиск. Пер. с англ. М:,Мир,1978

7. Вирт Н. Алгоритмы и структуры данных. - М:, Мир,1989г.

8. Рейнгольд Є., Нивергельт Д., Део Н. Комбинаторные алгоритмы, теория и практика. -М:, Мир,1980г.

9. Ахо А., Хопкрофт Д., Ульман Д. Построение и анализ вычислительных алгоритмов. -М:, Мир,1979г.

10. Немнюгин С.А., Turbo Pascal, Учебник, -СПб:, Издательство «Питер», 2001. -496 с.: ил.

11. Фаронов В.В., Турбо Паскаль 7.0. Начальный курс. Учебное пособие. Издание 7-е, переработанное. -М.: «Нолидж», издатель Молгачева С.В., 2001. -576 с., ил.

Додаток А

Інструкція користувача

А.1. Вступ

Даний програмний продукт призначений для запису та перегляду графічних BMP-файлів, а також для демонстрації можливостей мови програмування Turbo Pascal 7.0. В даному випадку відкриття, перегляд та збереження ВМР-файлів.

А.2. Вимоги до системи

Апаратні засоби:

· Операційна система Windows XP;

· Процесор фірми INTEL Pentium II (частота 600 MHz) або йому еквівалентний фірми AMD;

· ОЗУ об'ємом 128 Мбайт;

· Вільне місце на жорсткому диску: 0,5 Мбайт.

Програмні засоби:

Windows 98/ME/2000/2003/XP. Також наявність драйверу keyrus.com.

А.3. Використання програми

Створена програма є простою в застосуванні.

1. Натиснувши на пункт меню програми «Файл>Открыть ВМР-файл…» користувачу буде запропоновано ввести ім'я файлу, що потрібно відкрити.

2. Для того, щоб вивести обране зображення на екран потрібно натиснути на пункт меню «Работа с изображением> Отобразить ВМР-файл…».

3. Натиснувши на пункт меню програми «Файл>Сохранить ВМР-файл…» користувачу буде запропоновано ввести ім'я файлу, що потрібно зберегти на диск. Даним пунктом меню можливо скористатися, якщо попередньо було відкрито ВМР-файл.

4. Для перегляду довідки про програму потрібно натиснути на «Помощь> О Программе…».

5. Для виходу із програми потрібно натиснути «Файл>Выход».

А.4. Функціональні клавіші

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

Таблиця А.1 - Функціональні клавіші

Комбінація клавіш

Призначення

<Left>, <Right>, <Up>, <Down>

Переміщення по пунктам меню

<ENTER>

Переміщення по програмі вперед

<ESCAPE>

Переміщення по програмі назад

Додаток Б.

Текст програми

{ Программа просмотра и записи BMP-файлов }

{$I-} { Отключаем контроль ошибок ввода/вывода }

program BMP_Viewer;

uses

crt, graph, My_Unit;

type

rgb = record

r, g, b: byte;

end;

const

g = 9.81;

palette: array[0..7] of rgb = (

(r:0; g:0; b:0), { 0 }

(r:0; g:0; b:1), { 1 }

(r:0; g:1; b:0), { 2 }

(r:0; g:1; b:1), { 3 }

(r:1; g:0; b:0), { 4 }

(r:1; g:0; b:1), { 5 }

(r:1; g:1; b:0), { 6 }

(r:1; g:1; b:1) ); { 7 }

var

bmpfile, savefile: string;

filled: boolean;

Procedure FileNameWin (x, y, w, h : byte);

Begin

TextColor (15);

GotoXY (6,1);

{ Вспомогательный текст }

TextColor (14);

Write ('Введите путь к загружаемому BMP-файлу:');

TextColor (15);

Rama (x, y, w, h);

window (lo(WindMin)+x+1, hi(WindMin)+y,

lo(WindMin)+x+w-2, hi(WindMin)+y+h-1); { Созда_м окно для ввода }

TextBackGround (7);

ClrScr;

TextColor (0)

End; { *** FileNameWin *** }

{ Ввод пути к файлу }

procedure InputFileName;

var

s: string;

begin

RamaWindow ('Загрузка BMP-файла',16, 10, 47, 4);

FileNameWin (10, 3, 30, 1);

repeat

ClrScr;

Readln(s);

if s<>'' then

bmpfile:= s;

until s <> '';

filled:= true;

end; { *** InputFileName *** }

Procedure SaveFileNameWin (x, y, w, h : byte);

Begin

TextColor (15);

GotoXY (6,1);

{ Вспомогательный текст }

TextColor (14);

Write ('Введите путь к сохраняемому BMP-файлу:');

TextColor (15);

Rama (x, y, w, h);

window (lo(WindMin)+x+1, hi(WindMin)+y,

lo(WindMin)+x+w-2, hi(WindMin)+y+h-1); { Созда_м окно для ввода }

TextBackGround (7);

ClrScr;

TextColor (0)

End; { *** FileNameWin *** }

{ Ввод пути к сохраняемому файлу }

procedure InputSaveFileName;

var

s: string;

begin

RamaWindow ('Сохранение BMP-файла',16, 10, 47, 4);

SaveFileNameWin (10, 3, 30, 1);

repeat

ClrScr;

Readln(s);

if s<>'' then

savefile:= s;

until s <> '';

end; { *** InputFileName *** }

{ Процедура просмотра BMP-файлов }

function ViewBMP(bmpfile: string): byte;

var

i, j, k, n, x0, y0, xs, ys, asp: word;

dep, rc, gc, bc, curdif, mindif: double;

c: char;

page: boolean;

bmp: file of byte;

wid, hgt, w2, h2: word;

shift, fp: longint;

wh, wl, hh, hl, r, g, b, col, dumb: byte;

begin

assign(bmp, bmpfile); { Открываем bmp-файла }

reset(bmp);

if IOResult <> 0 then { Проверяем есть ли такой файл }

begin

FileError(bmpfile);

exit;

end;

GraphInit; { Включаем графический режим }

x0:= getmaxX div 2; { Узнаем координаты центра экрана }

y0:= getmaxY div 2;

seek(bmp, 18); { Переходим к полям в файле с описанием ширины }

read(bmp, wl);

read(bmp, wh);

wid:= wh*256 + wl;

seek(bmp, 22); { Переходим к полям в файле с описанием высоты }

read(bmp, hl);

read(bmp, hh);

hgt:= hh*256 + hl;

h2:= hgt; w2:= wid; asp:= 1; { Определяем высоту и ширину картинки на экране }

while (h2 > 480)or(w2 > 640) do

begin

h2:= h2 div 2; w2:= w2 div 2; asp:= asp*2;

end;

xs:= x0 - w2 div 2; { опредляем координаты верхнего левого угла на экране }

ys:= y0 - h2 div 2;

seek(bmp, 54); { Переходим к описанию пикселей картинки }

for i:= h2 downto 1 do { В bmp-файле строки записываются в обратном порядке }

begin

for k:= 1 to wid*(asp-1)*3 do { Пропускаем строки, которые не будем выводить }

read(bmp, dumb);

for j:= 1 to w2 do

begin

for k:= 1 to (asp-1)*3 do

read(bmp, dumb);

read(bmp, b);

read(bmp, g);

read(bmp, r);

rc:= r;

gc:= g;

bc:= b;

dep:= sqrt(rc*rc + gc*gc + bc*bc); { Определение глубины цвета }

if dep > 0 then

begin

rc:= rc / dep;

gc:= gc / dep;

bc:= bc / dep;

mindif:= 1000;

col:= 0;

for k:= 0 to 7 do { Определение цвета из 16 возможных }

begin

curdif:= abs(rc - palette[k].r) +

abs(gc - palette[k].g) +

abs(bc - palette[k].b);

if curdif < mindif then { Определяем наименьшое расхождение от цвета в палитре }

begin

mindif:= curdif;

col:= k;

end;

end;

if dep > 220 then { Если яркость высокая, выбираем яркий цвет }

col:= col + 8;

end

else

col:= 0;

putpixel(xs + j, ys + i, col); { Отображаем пиксель на экране }

end;

end;

close(bmp); { Закрываем файл }

repeat { Ожидание нажатия клавиши }

c:= readKey;

case c of

#27: ViewBMP:= 0;

#13: ViewBMP:= 1;

else c:=#0;

end;

until c <> #0;

CloseGraph; { Выключаем графический режим }

end; { *** ViewBMP *** }

{ Процедура сохранения BMP-файла}

function SaveBMP(savefile: string): byte;

var

bmp1, bmp2: file of byte;

bt: byte;

begin

Write('Подождите, пожалуйста!');

assign(bmp1, bmpfile);

reset(bmp1);

if IOResult <> 0 then

begin

FileError(bmpfile);

filled:= false;

exit;

end;

assign(bmp2, savefile);

rewrite(bmp2);

while not eof(bmp1) do

begin

read(bmp1, bt);

write(bmp2, bt);

end;

close(bmp1);

close(bmp2);

end; { *** SaveBMP *** }

{ Информационное диалоговое окно о программе }

procedure ProgramInfo;

var

c: char;

begin

TextColor(15);

RamaWindow ('О программе...', 18, 8, 44, 9);

GotoXY(1,2);

Writeln (' Данная программа предназначена для');

writeln (' просмотра и записи BMP-файлов.');

Writeln (' Для начала вам нужно загрузить ');

writeln (' BMP-файл, а затем отобразить его на ');

writeln (' экране.'); Writeln; Writeln;

TextColor(4); Write('':1, 'Esc ');

TextColor(15); Write('- Выход');

TextColor(10);

Write('':18, 'Enter ');

TextColor(15); Write('- Далее');

TextColor (15);

Repeat

c:=upcase(readkey);

Until (c=#27)or(c=#13);

If c=#27 then halt;

c:=#0;

end; { *** ProgramInfo *** }

{ Окно с предупреждением о bmp-файле }

procedure BMPAlert;

var

c: char;

begin

TextColor(15);

RamaWindowAlert ('Внимание', 18, 8, 44, 7);

GotoXY(13,3);

Writeln ('BMP-файл не загружен!');

GotoXY(1,7);

TextColor(13); Write('':1, 'Esc ');

TextColor(15); Write('- Выход');

TextColor(10);

Write('':18, 'Enter ');

TextColor(15); Write('- Далее');

TextColor (15);

Repeat

c:=upcase(readkey);

Until (c=#27)or(c=#13);

If c=#27 then halt;

c:=#0;

end; { *** BMPAlert *** }

{ Процедура "Header" отображает начальную заставку программы }

procedure Header;

var

c: char;

m_i, m_j, i_max, j_max: byte;

quit: boolean;

{ Вывод меню }

procedure DialogMenu;

{ Выбор цвета пункта меню }

procedure SetColor_i(i: byte);

begin

if m_i = i then

begin

TextColor(15);

TextBackGround(0)

end

else

begin

TextColor(0);

TextBackGround(7)

end;

end;

{ Выбор цвета пункта подменю }

procedure SetColor_j(j: byte);

begin

if m_j = j then

begin

TextColor(0);

TextBackGround(3);

end

else

begin

TextColor(15);

TextBackGround(0);

end;

end;

{ Вывод подменю }

procedure SubDialog;

begin

TextColor(15);

TextBackGround(0);

if m_i = 1 then { Подменю файла }

begin

J_max:= 3;

Rama (3, 3, 32, 3);

window (3, 3, 34, 5);

clrscr;

SetColor_j(1); GotoXY(1,1); Write(' Открыть BMP-файл... ');

SetColor_j(2); GotoXY(1,2); Write(' Сохранить BMP-файл... ');

SetColor_j(3); GotoXY(1,3); Write(' Выход ');

end

else if m_i = 2 then { Подменю работы с графом }

begin

J_max:= 1;

Rama (14, 3, 32, 1);

window (14, 3, 45, 3);

clrscr;

SetColor_j(1); GotoXY(1,1); Write(' Отобразить BMP-файл... ');

end

else if m_i = 3 then { Подменю помощи }

begin

J_max:= 1;

Rama (42, 3, 32, 1);

window (42, 3, 73, 3);

clrscr;

SetColor_j(1); GotoXY(1,1); Write(' О программе... ');

end;

end;

begin

SetColor_i(1); GotoXY(2,1); Write('ФАЙЛ');

SetColor_i(2); GotoXY(13,1); Write('РАБОТА С ИЗОБРАЖЕНИЕМ');

SetColor_i(3); GotoXY(41,1); Write('ПОМОЩЬ');

SubDialog;

end;

{ *** Обработка выбранного пункта меню *** }

procedure ProcessItem;

begin

case m_i of

1: case m_j of

1: InputFileName;

2: if filled then

begin

InputSaveFileName;

SaveBMP(savefile);

end

else

BmpAlert;

3: quit:= true;

end;

2: case m_j of

1: if filled then

ViewBMP(bmpfile)

else

BmpAlert;

end;

3: case m_j of

1: ProgramInfo;

end;

end;

end;

begin

m_i:= 1; m_j:= 1;

i_max:= 3; j_max:= 1;

quit:= false;

repeat

window(1,1,80,25);

TextBackGround(7);

TextColor(1);

ClrScr;

GotoXY(30,10); Writeln('Курсовая работа на тему:');

TextColor(4); GotoXY(21,12); Writeln('"Программа записи и просмотра BMP-файлов"');

TextColor(0); GotoXY(4,23);

Write('Перемещайтесь по меню с помощью клавиш <ВЛЕВО>, <ВПРАВО>, <ВВЕРХ> и <ВНИЗ>');

TextColor(1); GotoXY(4,24);

Write('Выбор пункта меню - <ENTER>, ');

TextColor(4); Write('выход из программы - <ESCAPE>');

DialogMenu; { Вывод меню }

c:=upcase(readkey);

if c = #27 then quit:= true; { Выход из программы }

if c = #13 then ProcessItem; { Обработка выбора меню }

if c = #0 then c:= readkey; { Перемещение по меню }

case ord(c) of

72: if m_j <= 1 then m_j:= j_max { up }

else dec(m_j);

80: if m_j >= j_max then m_j:= 1 { down }

else inc(m_j);

75: begin

if m_i <= 1 then m_i:= i_max { left }

else dec(m_i);

m_j:= 1;

end;

77: begin

if m_i >= i_max then m_i:= 1 { right }

else inc(m_i);

m_j:= 1;

end;

end;

until quit;

if quit then

halt;

end; { *** Header *** }

begin

filled:= false;

repeat

Header; { Заставка }

InputFileName; { Ввод длины маятника }

if ViewBMP(bmpfile) = 1 then

begin

InputSaveFileName;

SaveBMP(savefile);

end;

until false;

end.

Размещено на Allbest


Подобные документы

  • Створення програми на мові Асемблера, яка призначена для перегляду в текстовому режимі файлів, розмір яких більший за 64 кілобайти. Основні процедури, з яких вона складеться. Особливості та етапи перегляду великих файлів при невеликому об’ємі пам’яті.

    курсовая работа [13,1 K], добавлен 08.08.2009

  • Створення програми для перегляду потрібної інформації, яка може бути використана будь яким користувачем ЕОМ. Користування та розуміння переглядачів текстових файлів. Використання читання тексту порціями для реалізації прокрутки екрану вверх та вниз.

    курсовая работа [16,7 K], добавлен 12.08.2009

  • Використання програм-переглядачів для перегляду текстових файлів, які дозволяють користувачу роздивлятись будь-яку частину файлу у зручному для нього вигляді. Перегляд великих файлів при невеликому об’ємі пам’яті та читанні його по частинах (по блокам).

    курсовая работа [13,0 K], добавлен 12.08.2009

  • Робота з файлами, використовування програм-переглядачів, що забезпечують прокрутку тексту у вікні перегляду. Перегляд файлів в текстовому та інших форматах (шістнадцятеричному та бінарному). Алгоритм програми, системні вимоги, інструкція для користувача.

    курсовая работа [16,5 K], добавлен 08.08.2009

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

    курсовая работа [20,7 K], добавлен 08.08.2009

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

    курсовая работа [46,9 K], добавлен 16.09.2010

  • Визначення принципів розробки додатків для Windows 8 засобами об'єктно-орієнтованого програмування. Розробка програмного застосування для перегляду графічних файлів з функціями здобуття інформації про слайд-шоу. Інтерфейс користувача та лістинг програми.

    курсовая работа [2,8 M], добавлен 23.10.2014

  • Основні теоретичні відомості алгоритмів стиснення зображень: класи зображень та їх представлення в пам'яті, алгоритми та принципи групового кодування. Огляд та аналіз сучасних програмних засобів конвертування. Тестування, опис роботи програмного засобу.

    курсовая работа [2,9 M], добавлен 15.03.2014

  • Використання мови програмування Turbo Pascal, алгоритмів та графічних примітивів модуля Graph. Розробка та реалізація програми для сортування вагонів з довільного порядку в порядок через один. Присвоєння початкових значень та сортувальний алгоритм.

    курсовая работа [1,2 M], добавлен 23.06.2010

  • Призначення програми на мові Асемблера: захист файлів від несанкціонованого копіювання. Існуючі методи для захисту файлів від несанкціонованого доступу. Криптографія, прив'язка до місця розташування на диску, ключова дискета з нестандартним форматом.

    курсовая работа [24,9 K], добавлен 08.08.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.