Меню
  Список тем
  Поиск
Полезная информация
  Краткие содержания
  Словари и энциклопедии
  Классическая литература
Заказ книг и дисков по обучению
  Учебники, словари (labirint.ru)
  Учебная литература (Читай-город.ru)
  Учебная литература (book24.ru)
  Учебная литература (Буквоед.ru)
  Технические и естественные науки (labirint.ru)
  Технические и естественные науки (Читай-город.ru)
  Общественные и гуманитарные науки (labirint.ru)
  Общественные и гуманитарные науки (Читай-город.ru)
  Медицина (labirint.ru)
  Медицина (Читай-город.ru)
  Иностранные языки (labirint.ru)
  Иностранные языки (Читай-город.ru)
  Иностранные языки (Буквоед.ru)
  Искусство. Культура (labirint.ru)
  Искусство. Культура (Читай-город.ru)
  Экономика. Бизнес. Право (labirint.ru)
  Экономика. Бизнес. Право (Читай-город.ru)
  Экономика. Бизнес. Право (book24.ru)
  Экономика. Бизнес. Право (Буквоед.ru)
  Эзотерика и религия (labirint.ru)
  Эзотерика и религия (Читай-город.ru)
  Наука, увлечения, домоводство (book24.ru)
  Наука, увлечения, домоводство (Буквоед.ru)
  Для дома, увлечения (labirint.ru)
  Для дома, увлечения (Читай-город.ru)
  Для детей (labirint.ru)
  Для детей (Читай-город.ru)
  Для детей (book24.ru)
  Компакт-диски (labirint.ru)
  Художественная литература (labirint.ru)
  Художественная литература (Читай-город.ru)
  Художественная литература (Book24.ru)
  Художественная литература (Буквоед)
Реклама
Разное
  Отправить сообщение администрации сайта
  Соглашение на обработку персональных данных
Другие наши сайты
Приглашаем посетить
  Чуковский (chukovskiy.lit-info.ru)

   

Вирізання картинок з екрану та запис їх в BMP форматі (для графіки) і TXT форматі (для тексту)

Вирiзання картинок з екрану та запис їх в BMP форматi (для графiки) i TXT форматi (для тексту)

Мiнiстерство освiти та науки України

Кафедра програмного забезпечення

КУРСОВА РОБОТА

з дисциплiни

“Програмування мовою ASM-86”

на тему:

“Вирiзання картинок з екрану та запис їх в BMPформатi (для графiки) i TXT форматi (для тексту)”


Змiст

2. Постановка задачi

3. Обґрунтування методу розв’язку

4. Алгоритм програми

5. Реалiзацiя програми

7. Інструкцiя користувача

9. Використана лiтература

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


1. Вступ

При роботi буває необхiдно “перехопити” текстову або графiчну iнформацiю, яку виводять на екран рiзнi програми, в текстовий або графiчний файл для подальшої обробки. Для такої мети використовують резидентнi програми.

Для роботи нам знадобиться опис заголовку ВМР-файла. Його можна знайти в додатку (в лiстингу файла grabber. inc).

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

Для того, щоб записувати змiст екрану, будемо читати його з вiдеопам’ятi. Для роботи з файлами можна використовувати функцiї ОС (з переривання 21h). Але при використаннi функцiй ДОС з обробника переривань виникає проблема нереентерабельностi ДОС (тобто не можна викликати сервiс ДОС пiд час роботи будь-якої її функцiї). Тому використовується перехоплення не документованого переривання ДОС 28h, яке викликається в той момент, коли система вiльна. В цей час можна викликати функцiї.

Графiчних режимiв дуже багато. Для реалiзацiї виберемо режим 3 (текстовий ) i 13h (графiчний – режим 320х200х256 кольорiв).

4. Алгоритм програми

1. Встановити обробники переривань 5 i 28h.

2. Залишити резидент в пам'ятi.

Обробка переривання 5.

1. Встановити змiнну, яка сигналiзує про натиснення клавiшi, в 1.

Обробка переривання 28.

1. Визначити режим екрану.

2. Вiдкрити файл на запис.

3. У разi текстового файлу записати побайтно змiст вiдеопам’ятi у файл i перейти на п. 5.

5. Закрити файл.

5. Реалiзацiя програми

Пiсля запуску програма встановлює обробник на переривання 5 (клавiша PrintScreen) та 28h (переривання при якому вiдбувається збереження екрану). Потiм вона залишається резидентною в пам’ятi.

При натисканнi клавiшi PrintScreen встановлюється ознака про її натиснення. Коли ДОС звiльняється i виконує переривання 28, то при встановленiй ознацi вiдбувається збереження екрану. Створюється або обнуляється файл, визначається поточний режим екрану i спосiб запису, з разi текстового режиму у файл записується змiст вiдеопам’ятi у виглядi рядкiв, а у разi графiчного – заповнюється структура BMP файла, визначається палiтра, i все це разом зi змiстом графiчної областi вiдеопам’ятi записується у файл. Пiсля цього файл закривається i обробка завершується.

6. Системнi вимоги

Процесор: 80286 або старший.

Пам’ять: 640 К або бiльше

Екран: CGA або вище для тексту, VGA i вище для графiки


Для початку роботи програми треба запустити файл GRABBER.COM. Програма встановить свою резидентну частину i завершиться. Для зберiгання текстового або графiчного екрану треба натиснути клавiшу PrintScreen. У разi текстового режиму у поточному каталозi з’явиться файл dump.txtзi змiстом екрану, а у разi графiчного режиму 320х200х256 – файл dump.bmp. Для вивантаження програми з пам’ятi можна використати функцiї оболонки VC.


Отже, завдяки виконанню роботи продемонстровано методи створення резидент них програм, використання функцiй MS-DOS в обробнику переривань завдяки недокументованому перериванню 28, розглянута структура графiчних файлiв формату ВМР.


9. Використана лiтература

1. Том Сван "Освоение Turbo Assembler"

2. Роберт Журден "Справочник программиста на персональном компьютере фирмы IBM"

3. Абель П. "Мова Асемблера для IBM PC та програмування"


ЛІСТИНГ ПРОГРАМИ

grabber. asm

. model tiny

. 286

. code

oldint28treater dd 0

readytowrite db 0

filenamebmp db 'dump.bmp',0

col dw 0

<>

bmpinfo BITMAPINFOHEADER <>

bmprgb RGBQUAD <>

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

; створення BMP файлу

createfilebmp proc

;створити файл

mov ah,3ch

xor cx,cx

mov dx,offset filenamebmp

push cs

pop ds

int 21h

pop ds

mov word ptr cs:[handle],ax ;хендл на файл

ret

; створення файлу

createfile proc

;створити файл

mov ah,3ch

xor cx,cx

push ds

push cs

pop ds

int 21h

pop ds

ret

createfile endp

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

;закриття файлу

mov ah,3eh

int 21h

ret

;перехопити режим 320x200x256 (13h)

;запис таблицi заголовка bmp

mov word ptr cs:[bmpheader. bfType],4d42h

mov word ptr cs:[bmpheader. bfReserved1],0

mov word ptr cs:[bmpheader. bfReserved2],0

mov word ptr cs:[bmpheader. bfSize+2],0

mov word ptr cs:[bmpheader. bfOffbits],0436h

;запис таблицi iнформацiї

mov word ptr cs:[bmpinfo. biSize],28h

mov word ptr cs:[bmpinfo. biHeight],0c8h

mov word ptr cs:[bmpinfo. biSize+2],0

mov word ptr cs:[bmpinfo. biWidth+2],0

mov word ptr cs:[bmpinfo. biHeight+2],0

mov word ptr cs:[bmpinfo. biPlanes],1

mov word ptr cs:[bmpinfo. biBitCount],8

mov word ptr cs:[bmpinfo. biSizeImage],0

mov word ptr cs:[bmpinfo. biClrImportant],0

mov word ptr cs:[bmpinfo. biCompression+2],0

mov word ptr cs:[bmpinfo. biSizeImage+2],0

mov word ptr cs:[bmpinfo. biXPelsPerMeter+2],0

mov word ptr cs:[bmpinfo. biYPelPerMeter+2],0

mov word ptr cs:[bmpinfo. biClrUsed+2],0

mov word ptr cs:[bmpinfo. biClrImportant+2],0

;запис BITMAPFILEHEADER

mov cx,size bmpheader

mov ah,40h

mov bx,word ptr cs:[handle]

push ds

pop ds

mov dx,offset bmpheader

int 21h

pop ds

;======================================================

;запис BITMAPINFOHEADER

mov cx,size bmpinfo

mov ah,40h

mov bx,word ptr cs:[handle]

push ds

push cs

pop ds

mov dx,offset bmpinfo

int 21h

pop ds

;======================================================

;отримання i запис палiтри

SAVEP:

push cx

;дiстаємо палiтру

mov dx,03c8h

mov ax,si

inc si

inc dx

shl al,2

mov byte ptr cs:[bmprgb. rgbBlue],al

shl al,2

in al,dx

shl al,2

mov byte ptr cs:[bmprgb. rgbRserved],0

mov ah,40h

mov bx,word ptr cs:[handle]

push cs

pop ds

mov dx,offset bmprgb

int 21h

pop ds

;======================================================

;тепер записуємо графiчнi данi

push es

push ds

push cs

mov dx,offset data

mov cx,200

mov word ptr cs:[row],cx

mov cx,320

colsb: ;///////////

push ax

mov word ptr cs:[col],ax

push dx

push ax

push bx

mov ax,320

mul bx

add ax,word ptr cs:[col]

mov si,ax

pop bx

pop dx

mov al,es:[si]

mov byte ptr cs:[data],al

mov ah,40h

int 21h

pop cx

add si,2

loop colsb

;///////////

pop cx

;///////////

loop rowsb

pop ds

pop es

ret

mode13h endp

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

;перехопити текстовий режим

modetext proc

push es

pop ds

mov es,dx

xor si,si

mov bx,word ptr cs:[handle]

mov cx,25

rows:

;///////////

push cx

mov cx,80

cols: ;///////////

push cx

mov cx,1

mov byte ptr cs:[data],al

add si,2

loop cols

;запис 10,13

mov cx,1

mov byte ptr cs:[data],10

mov ah,40h

int 21h

mov byte ptr cs:[data],13

int 21h

pop cx

pop ds

pop es

call closefile

ret

modetext endp

int28treater: ;обробник int 28h

pusha

pushf

;перевiрка чи є виклик до роботи

cmp byte ptr cs:[readytowrite],1

jne exit28

mov byte ptr cs:[readytowrite],0

mov ah,0fh

;в al - режим

cmp al,3

jne case2

call modetext ;textmode3

case2:

cmp al,13h

call mode13h ;320x200x25613h

case3:

exit28:

popf

popa

jmp dword ptr cs:[oldint28treater]

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

int5treater: ;обробник клавiшi PrintScreen

mov byte ptr cs:[readytowrite],1

iret

rezidentend:

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

greeting db 10,10,10,10,13,'Press PRINTSCREEN to grab text screen or graphic!',10,10,10,'$'

inital:

pop ds

mov dx,offset greeting

int 21h

;посадка резидента на int 5h

mov ds,ax

cli

mov ax,offset int5treater

mov word ptr ds:[5h*4],ax

push cs

pop ax

mov word ptr ds:[5h*4+2],ax

sti

;посадка резидента на int 28h

mov ax,word ptr ds:[28h*4]

mov word ptr cs:[oldint28treater],ax

mov word ptr cs:[oldint28treater+2],ax

cli

mov ax,offset int28treater

mov word ptr ds:[28h*4],ax

push cs

mov word ptr ds:[28h*4+2],ax

sti

;Залишитись резидентно

mov dx,offset rezidentend

shr dx,4

add dx,16

mov ah,31h

xor al,al

int 21h

end start

------------------------------------------------------------------------

ФАЙЛ з описом структур grabber. inc

BITMAPFILEHEADER struc

bfSize dd 0 ;//размер файла в dword

bfReserved1 dw 0 ;//не используется

bfReserved2 dw 0 ;//не используется

bfOffbits dd 0 ;//смещение данных битового образа от

;//заголовка в байтах

BITMAPFILEHEADER ends

;======================================================

BITMAPINFOHEADER struc

biSize dd 0 ;//число байт, занимаемых структурой

;//BITMAPINFOHEADER

biWidth dd 0 ;//ширина битового образа в пикселах

biHeight dd 0 ;//высота битового образа в пикселах

biPlanes dw 1 ;//число битовых плоскостей устройства

biCompression dd 0 ;//тип сжатия

biXPelsPerMeter dd 0 ;//горизонтальное разрешение устройства,

;//пиксел/м

biYPelPerMeter dd 0 ;//вертикальное разрешение устройства,

"важных" цветов

BITMAPINFOHEADER ends

RGBQUAD struc

rgbRed db 0 ;//интенсивность красного

rgbGreen db 0 ;//интенсивность зеленого

rgbBlue db 0 ;//интенсивность голубого

RGBQUAD ends