Зеркальное отображение изображения, хранящегося в файле BMP

Считывание информации из файла, анализ заголовка. Установка видеорежима и анализ его параметров. Разработка процедуры вывода изображения на экран. Методы вывода сообщений. Разработка алгоритма, удовлетворяющего требованиям задания и интерфейса программы.

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

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

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

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

Московский Энергетический Институт

(Технический Университет)

Курсовая работа

По дисциплине

"Системное Программное Обеспечение"

Зеркальное отображение изображения, хранящегося в файле BMP

Выполнил студент

Махов Роман

Москва, 2010

СОДЕРЖАНИЕ

1. Анализ задания

2. Проектирование пользовательского интерфейса

2.1 Общие требования

2.2 Особенности программной реализации

3. Разработка алгоритма

3.1 Считывание информации из файла, анализ заголовка

3.2 Установка видеорежима и анализ его параметров

3.3 Разработка процедуры вывода изображения на экран

3.4 Схема алгоритма

4. Разработка второстепенных процедур и макрокоманд

5. Тестирование и отладка

Заключение

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

Приложение А. Перечень переменных, используемых в программе

Приложение Б. Листинг программы

1. АНАЛИЗ ЗАДАНИЯ

Техническое задание:

Зеркальное отображение изображения, хранящегося в файле BMP (24 бит на точку). Данные остаются в старом файле или записываются в новый файл.

Необходимо реализовать выбор и открытие файлов. Также нужно проанализировать и реализовать программно случаи ввода некорректного входного файла (отсутствие файла, неверные тип, глубина цвета).

2. ПРОЕКТИРОВАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА

2.1 Общие требования

Для верной работы программы необходимо указать точный пусть к входному и выходному файлам и их имена. Поэтому, после запуска программы надо реализовать ввод пользователем этих данных с клавиатуры. По завершению своего выполнения программа должна оповестить об этом пользователя.

Данные требования будут реализованы с помощью запросов на ввод данных с клавиатуры и сообщений о завершении работы.

2.2 Особенности программной реализации

Методы вывода сообщений.

Для удобного пользовательского интерфейса , каждое выведенное на экран или введенное пользователем сообщение будет начинаться с новой строки.

Программно это реализуется переводом каретки на новую строку после ввода - вывода очередного сообщения. Дл я этого нам необходимо использовать функцию вывода на экран языка программирования assembler 09H для прерывания INT 21.

Пример реализации вывода на экран и перехода на новую строку.

mov ah,09h

lea dx,message

int 21h

mov ah,09h

lea dx,next_string

int 21h

Где message - ASCII-строка с выводимым сообщением, next_string - ASCII-строка с символами конца строки и переводом каретки.

Методы вывода сообщений

Необходимо выбрать функцию , с помощью которой будет осуществлен ввод данных , их отображение на экране и сохранение введенных данных. Удовлетворяющая этим условиям функция - 0AH для прерывания INT 21.

Реализация команды:

mov ah,0ah

lea dx,input_message

int 21h

Первый бит input_message должен содержать значение максимального количества вводимых символов. Второй бит формируется из подсчета вводимых символов. За вторым битом находится непосредственно вводимое сообщение.

Методы открытия ,закрытия файла

В нашем случаем , нам необходима такая функция открытия файла, которая , которая осуществляется при наличии ASCII-строки с адресом файла ,введенного пользователем с клавиатуры. Целесообразно предусмотреть возможность фиксации этой функцией ошибки , связанной с отсутствием запрашиваемого файла. Также она должна возвращать файловый номер, в случае успешного открытия, для дальнейшей работы с файлом.

Нам подходит 3DH срабатывающая по прерыванию INT 21. Для ее корректной работы требует ASCIIZ-строки с адресом и именем файла в формате:

<Название диска>:\<названия папок>\...\<имя файла>.bmp,

Об возникновении ошибки , данная функция оповещает флагом CF.

Если флаг СF = 0, то возвращает файловый номер.

Пример реализации данной функции:

mov ax,3d02h

lea dx,pathname

int 21h

Где в регистре ax указывается номер функции и режим чтения - записи, а в регистре dx ASCIIZ-строку с адресом файла.

Закрытие файлов происходит перед окончанием программы и для этого применяется функция 3EH работающая по прерыванию INT21:

mov ah,3eh

mov bx,file_handle

int 21h

В регистре bx указывается файловый номер ожидающего закрытия файла.

Методы создания выходного файла.

По техническому заданию обработанные данные входного файла должны быть помещены в созданный программой выходной файл. Для этого надо подобрать функцию языка программирования , которая создает файл по указанному пути и обеспечивает возможность редактировать этот файл. Функция удовлетворяющая этим условиям - 3СH работающая по прерыванию INT21.

Пример реализации функции:

mov ah,3ch

mov cx,0

lea dx, path_out_name

int 21h

Где 3ch - номер функции, в сx указывается атрибуты для файла ( в данном случаем чтение ,запись), path_out_name - ASCIIZ-строка с адресом файла.

3. РАЗРАБОТКА АЛГОРИТМА

Разработаем алгоритм ,который будет удовлетворять требованиям технического задания и разработанного пользовательского интерфейса.

3.1 Считывание информации из файла, анализ заголовка

программа интерфейс изображение

После осуществления доступа к входному файлу, необходимо считать информацию о его содержании. Так как ,в начале каждого ВМР файла находится его заголовок, размер которого 54 байта , удобно разработать с программе структуру соответствующую этому заголовку. В первую необходимо считать заголовок из входного файла для дальнейшего анализа и формирования заголовка выходного файла. Для решения этой задачи удобно воспользоваться функцией языка assembler 3FH, выполняемая по прерыванию INT 21H. Перед выполнением считывания функция требует определения числа считываемых байтов информации, значение файлового номера, определяющего текущую позицию, с которой происходит считывание, а также буферную строку, куда помещается считанная информация. Для удобства будем использовать макрос чтения из файла , так как далее будет необходимо повторять чтение ,но с другими параметрами.

Реализация чтения заголовка из файла:

Макрос чтения из файла

read_bmp macro par1,par2,par3

mov ah,3Fh

mov bx,par1 ;идентификатор файла

mov cx,par2 ;количество читаемых/записываемых байт

lea dx,par3 ;путь к буферу чтения/записи

int 21h

endm

Чтение заголовка входного файла.

read_bmp bmphandle,54,header

Необходимо проанализировать считанный заголовок. Первое слово заголовка BMP файла всегда содержит символы «BM», представленные кодом 4D42h. По данной информации можно осуществить проверку формата файла и организовать выход, если формат не ВМР. Программа сравнивает атрибут структуры заголовка с кодом 4D42. В случае не совпадения выполнение программы должно прерваться. Так же необходим сравнить глубину цветов с указанной в ТЗ (24-бита на пиксел). Для этого необходимо сравнить атрибут BitCount структуры заголовка со значением заданной глубины цвета. В случае не совпадения выполнение программы должно прерваться

Так, как наша задача состоит в обработке и реконструкции изображения, то проверенный заголовок необходимо записать в выходной файл. Данную задачу легко реализовать с помощью с помощью функции языка программирования 40H, работающей по прерыванию INT21. Перед выполнением записи функция требует определения числа записываемых байтов информации, значение файлового номера выходного файла, а также буферную строку, из которой берем данные. Запись в файл , так же как и чтение удобно реализовать макросом:

макрос записи в файл

write_bmp macro par1,par2,par3

mov ax,4000h

mov bx,par1 ;запись всегда в выходной файл

mov cx,par2 ;кол-во записываемых байт

lea dx,par3 ;из буфера

int 21h

endm

запись заголовка файла

write_bmp bmp_out_handle,54,header ;запись заголовка файла

3.2 Разработка основной процедуры

В соответствии с поставленным задание , необходимо сформировать в выходном файле зеркальное отображение входного файла. Для решения этой задачи будет использоваться процедура в которой определяются все параметры непосредственно изображения , необходимые для построчного преобразования пикселов. Понадобятся такие параметры как, размер данных изображения , количество строк и количество байтов одной строки.

На основании полученных данных будет построена процедура, осуществляющая построчное , попикселное изменение данных , записываемях в выходной bmp файл.

4. РАЗРАБОТКА ВТОРОСТЕПЕННЫХ ПРОЦЕДУР И МАКРОКОМАНД

Название процедур, выполняющих второстепенные функции в программе, а также их характеристики описаны в таблице 1.

Таблица 1 Второстепенные процедуры

Название процедуры

Ее назначение

zero

Необходим для определения количества нулей дописываемых в конце строк данных изображения при использовании глубины цвета равной 24бита на пиксел.

exit

Данная процедура производит закрытие входного и выходного файлов, выводит сообщение о завершении работы программы и завершает ее.

5. ТЕСТИРОВАНИЕ И ОТЛАДКА

Данный программный продукт можно тестировать по нескольким направлениям:

а) На попытку открыть файл очень большого размера .

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

Случай открытия не ВМР файла, открытия ВМР файла с глубиной цвета отличной от 24 бит на пиксел, указания неверного или несуществующего имени файла был оговорен выше.

ЗАКЛЮЧЕНИЕ

Исходя из вышеприведенного описания, разработанная программа для выполнения требует:

а) Наличие на диске 24-разрядный .BMP файла

При описании процесса разработки были выполнены все требования технического задания. Однако данный программный продукт может быть усовершенствован в следующих направлениях:

а) Внедрение более совершенного диалога пользователя с программой для предоставления более широкого диапазона возможных действий в случаях невыполнения условий работоспособности и большей наглядности проводящейся работы.

б) Разработка более совершенных алгоритмов вывода графического изображения на экран компьютера.

СПИСОК ЛИТЕРАТУРЫ

1. Абель П., Язык ассемблера для IBM PC и программирования - М.: Высшая школа, 1992. - 447 с.

2. Финогенов К.Г., Самоучитель по системным функциям MS-DOS. - М.: Горячая линия - Телеком, 2001. - 382 с.

3. Соколенко П., Программирование SVGA-графики для IBM PC.

ПРИЛОЖЕНИЕ А. Перечень переменных, используемых в программе

Полный перечень всех переменных с описанием приведен в таблице 2.

Таблица 2 Переменные объявленные в программе

Идентификатор

Смысл

bmphandle

Индикатор входного файла

bmp_out_handle

Индикатор выходного файла

realwidth_bmp

Ширина изображения

len

Размер данных изображения

mid_px

Средний пиксел

str_c

Количество строк

wdth_b

Длинна строки в байтах

mid_b

Средний байт

nol

Количество нулей добавляемых в конце стоки

offbits

Количество бит в пикселе

ПРИЛОЖЕНИЕ Б

Листинг программы

.model small

.stack 100h

.data

;-------------------------------------------------------------------------- mess_in db 'Please, input the adress of source bmp file:','$'

mess_out db 'Please, input the adress of out bmp file:','$'

mess_done db 'done.','$'

err_no_file_m db 'There is no such file!','$'

err_type_m db 'Incorrect type of the file','$'

err_bitcount_m db 'Incorrect value of bitcount','$'

err_width_m db 'The width of your bmp file must be less than 10919 px','$'

prop db 10,13,'$'

;-----------------------------------------------------------------------

bmphandle dw ?

bmp_out_handle dw ?

realwidth_bmp dw ?

;-----------------------------------------------------------------------

str_list label byte ;список параметров для облости ввода

max_len db 127

act_len db ?

pathname db 30 dup (' ')

str_list_out label byte

max_len_out db 127

act_len_out db ?

path_out_name db 30 dup (' ')

;-----------------------------------------------------------------------

title_bmp struc ;структура .bmp файла

type_bmp dw ? ;Сигнатура "BM"

sizefh dd ? ;Размер файла

reserved dd ? ;Зарезервировано

offsetbits dw 2 dup(?) ;Смещение изображения от начала файла

sizeih dd ? ;Длинна заголовка

width_bmp dw ? ;Ширина изображения

width_bmph dw ?

height_bmp dd ? ;Высота изображения

planes dw ? ;Число проскостей

bitcount dw ? ;Глубина цвета, бит на точку

compression dd ? ;Тип компрессии

size_image dd ? ;Размер изображения, байт

xpels dd 2 dup(?) ;Горизонтальное разрешение точки на метр

colorsused dd ? ;Число используемых цветов

colorsimportant dd ? ;Число основных цветов

title_bmp ends

header title_bmp <>

;-----------------------------------------------------------------------

buff db 32768 dup(?) ;размер буфера

len dw ? ;размер данных изображения

mid_px dw ? ;средний пиксел

str_c dw ? ;кол-во строк

wdth_b dw ? ;длинна строки в байтах

mid_b dw ? ;средний байт

nol dw ?

offbits dw ? ;кол во байт на пиксел

;-----------------------------------------------------------------------

.code

;-----------------------------------------------------------------------

;макрос чтения из файла

read_bmp macro par1,par2,par3

mov ah,3Fh

mov bx,par1 ;идентификатор файла

mov cx,par2 ;количество читаемых/записываемых байт

lea dx,par3 ;путь к буферу чтения/записи

int 21h

endm

;-----------------------------------------------------------------------

;макрос записи в файл

write_bmp macro par1,par2,par3

mov ax,4000h

mov bx,par1 ;индакатор выходного файла

mov cx,par2 ;кол-во записываемых байт

lea dx,par3 ;из буфера

int 21h

endm

;-----------------------------------------------------------------------

begin:

mov ax,@data ;установка регистра ds на начало

mov ds,ax ;сегмента данных

mov ah,09h

lea dx,mess_in ;Please, input the adress of bmp file

int 21h

mov ah,09h

lea dx,prop ; Переводим каретку на след. строку

int 21h

mov ah,0ah

lea dx,max_len ;input adress of source bmp

int 21h

xor bx,bx

mov bl,[max_len+1]

mov [pathname+bx],0

mov ah,09h

lea dx,prop ; Переводим каретку на след. строку

int 21h

mov ah,09h

lea dx,mess_out ;Please, input the adress of out bmp file

int 21h

mov ah,09h

lea dx,prop ; Переводим каретку на след. строку

int 21h

mov ah,0ah

lea dx,max_len_out ;input adress of out bmp

int 21h

xor bx,bx

mov bl,[max_len_out+1]

mov [path_out_name+bx],0

mov ax,3d02h ;открытие исходного файла

lea dx,pathname

int 21h

jnc file_rdy

call err_no_file

file_rdy:mov bmphandle,ax

read_bmp bmphandle,54,header ;чтение заголовка файла

cmp header.type_bmp,4d42h ;проверка типа 4d42 = 'bm'

je check_wdth

call err_type

;----------------------------------------------------------------------- check_wdth:

cmp header.width_bmph,0 ;проверка ширины

je next_check

call err_width

next_check:

cmp header.width_bmp,10919

JBE exit_file

call err_width

;----------------------------------------------------------------------- exit_file: ;создание выходного файла

mov ah,3ch

mov cx,0

lea dx, path_out_name

int 21h

mov bmp_out_handle,ax

write_bmp bmp_out_handle,54,header ;запись заголовка файла

;-----------------------------------------------------------------------

cmp_bit:

cmp header.bitcount,24 ;проверка глубины

jne cmp_err

mov [offbits],3

jmp cmp_off

cmp_err:

call err_bitcount

cmp_off:

mov ax,[header.offsetbits]

cmp ax,54

je cmp_ax

sub ax,54

mov di,ax

read_bmp bmphandle,di,buff

write_bmp bmp_out_handle,di,buff

cmp_ax: call main

;----------------------------------------------------------------------- zero proc near ;процедура, которая вычисляет кол-во нулей, дописанных в конце строки.

xor dx,dx

mov ax,[realwidth_bmp]

mov bx,4

div bx

mov [nol],dx

ret

zero endp

;-----------------------------------------------------------------------

mirror proc near ;процедура, которая реализует перестановку байт в памяти, начиная с адреса buff.

mir_buff:

mov di,[wdth_b]

sub di,[offbits]

push cx

mov cx,[mid_px]

mir_str:

push cx

mov cx,[offbits]

mini_str:

mov dh,[bx]

mov dl,[bx+di]

mov [bx],dl

mov [bx+di],dh

inc bx

loop mini_str

pop cx

sub di,[offbits]

sub di,[offbits]

loop mir_str

add bx,[mid_b]

cmp [nol],0

je pop_cx

add bx,[nol]

pop_cx: pop cx

loop mir_buff

write_bmp bmp_out_handle,[len],buff ;запись в файл

ret

mirror endp

;----------------------------------------------------------------------- main proc near ;основная процедура:инициализация переменных,вызов других процедур

mov ax,[header.width_bmp]

mov [realwidth_bmp],ax

mov bx,[offbits]

mul bx

mov [wdth_b],ax

;----------------------------------------------------------------------- call zero

;----------------------------------------------------------------------- cmp realwidth_bmp,10919 ;проверка ширины

jbe widthl

call err_width

;-----------------------------------------------------------------------

widthl: ;задание значение переменным

mov cx,[wdth_b]

add cx,[nol]

xor dx,dx

mov ax,32768

div cx

mov [str_c],ax

mov ax,cx

mul [str_c]

mov [len],ax

xor dx,dx

mov ax, [realwidth_bmp]

mov bx,2

div bx

mov [mid_px],ax

push dx

xor dx,dx

mov bx,[offbits]

mul bx

mov [mid_b],ax

pop dx

cmp dx,0

je je_mid_dx

mov cx,[offbits]

add [mid_b],cx

je_mid_dx:

mov cx,1

push cx

rd: ;считывание из файла

read_bmp bmphandle,[len],buff

jc exit

cmp ax,cx ;если оставшаяся часть файла меньше [len]

je je_ax_cx

pop cx

mov cx,0

push cx

mov [len],ax

xor dx,dx

div [wdth_b]

cmp ax,0

je exit

mov [str_c],ax

je_ax_cx:

lea bx,buff

mov cx,[str_c]

call mirror

pop cx

cmp cx,0

je exit

push cx

jmp rd

ret

main endp

;-----------------------------------------------------------------------

err_no_file proc near

mov ah,09h

lea dx,err_no_file_m ;There is no such file!

int 21h

call exit

err_no_file endp

;-----------------------------------------------------------------------

err_type proc near

mov ah,09h

lea dx,err_type_m ;Incorrect type of the file

int 21h

call exit

err_type endp

;-----------------------------------------------------------------------

err_bitcount proc near

mov ah,09h

lea dx,err_bitcount_m ;Incorrect value of bitcount

int 21h

call exit

err_bitcount endp

;-----------------------------------------------------------------------

err_width proc near

mov ah,09h

lea dx,err_width_m ;The width of your bmp file must be less than 10919 px

int 21h

call exit

err_width endp

;-----------------------------------------------------------------------

exit proc near ;процедура, которая завершает работу программы,

;и выводит соответствующее сообщение

mov ah,3eh

mov bx,bmphandle

int 21h

mov ah,3eh

mov bx,bmp_out_handle

int 21h

mov ah,09h

lea dx,prop ; пропускаем строку

int 21h

mov ah,09h

lea dx,mess_done ;done.

int 21h

mov ax,4c00h ;завершение программы

int 21h

exit endp

;-----------------------------------------------------------------------

End

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


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

  • Задача зеркального отражения изображения как одна из подзадач многих программ. Анализ создания программы, выполняющей зеркальное отображение изображения, который хранится в файле формата .pcx (256 цветов). Проектирование пользовательского интерфейса.

    курсовая работа [625,6 K], добавлен 17.05.2013

  • Видеоадаптер и его необходимость для вывода изображения на экран. Принцип работы видеоадаптера. Оценка производительности трехмерной графики программой 3D Mark. Анализ результатов тестирования. Оценка качества изображения. Световые и бликовые эффекты.

    контрольная работа [998,0 K], добавлен 20.01.2014

  • Особенности dirent как входной структуры каталога, независимой от файловой системы. Получение содержимого каталога и информации о файле. Разработка блок-схемы алгоритма программы. Изучение программного обеспечения для реализации поставленной задачи.

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

  • Реализация алгоритма поиска, его составляющие. Считывание матрицы лабиринта из файла, нахождение в нем свободных мест. Иерархия классов для работы в графическом режиме и вывода необходимого на экран. Дополнительные типы данных, используемые в программе.

    курсовая работа [260,3 K], добавлен 17.01.2009

  • Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.

    контрольная работа [1,6 M], добавлен 04.01.2015

  • Разработка "Web-браузера". Программное средство для просмотра web-сайтов, их обработки, вывода и перехода от одной страницы к другой. Проектирование программы и ее интерфейса, разработка алгоритма. Тестирование программы и анализ проведенных расчетов.

    курсовая работа [17,7 M], добавлен 19.12.2010

  • Основы проверки и расчета входных данных и вывода выходных данных программы, их блок-схемы. Реализация функции считывания числовых данных из файла, управление (создание, уничтожение и редактирование) визуальными компонентами во время выполнения программы.

    контрольная работа [1,3 M], добавлен 12.06.2009

  • Разработка и тестирование программы на языке Pascal для поиска, вывода на экран и сохранения в файл списка книг с фамилиями авторов в алфавитном порядке, изданных после 2012 года. Разработка алгоритма и его описание. Инструкции по эксплуатации приложения.

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

  • Описание записи, содержащей поля: расчётный счёт плательщика и получателя, перечисляемая сумма в рублях. Программа для ввода данных с клавиатуры в массив. Листинг исходного файла программы вывода информации на экран и распечатка снимков с экрана.

    контрольная работа [710,6 K], добавлен 20.01.2011

  • Задачи цифровой обработки изображений. Методы пороговой сегментации. Создание программы представления рисунка в виде матрицы и применения к нему пороговой обработки. Разработка интерфейса программы загрузки и фильтрации изображения с выбранным порогом.

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

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