Курстық жұмыс: Информатика | Графикалық ақпаратты экран терминалына шығару
Мазмұны
Графикалық ақпаратты экран терминалына шығаруBIOS видеодрайверінің графикалық мүмкіндіктері
Графикалық режимдегі програмалау есептері
EGA адаптері және оның бір бағыттағы басқару програмасы
Графикалық режимдегі EGA адаптерін тікелей програмалау есептері
1.Графикалық ақпаратты экран терминалына шығару
1.1.BIOS видеодрайверінің графикалық мүмкіндіктері
EGA графикалық адаптер бұл екі графикалық беттің рұқсат етілген 640x350 түсті пикселді сақтаумен және бейнелеумен қамтамасыз етеді. Адаптер 64 түспен қамтамасыз етілген, бірақ экран бетіндегі бейнелер 16 түсті құрайды және олар оңай өзгереді. Машина іске қосылғанда стандартты палитра құрылады.
Барлық экрандағы фонды түс әртүрлі 16 түсті қабылдай береді және екі жақтағы беттің фоны бір уақытта өзгеріп отырады. Фонды түсті өзгертуге болады және ол экран бетіне шығарылған бейнені қозғамайды.
Еркін бейнелерден басқа, экран бетіне графикалық режимдегі мәтіндік ақпаратты әртүрлі DOS және BIOS функцияларын пайдаланып, экранға жолды символдарды шығаруға болады. Мысалы: INT 21h функциясы 40h немесе 09h функциялары арқылы, INT 10 функциясы 09h немесе 0Ah функцилары арқылы шығарады және т.б. функциялары арқылы шығарылады. Экрандағы жолды позициялау үшін BIOS драйверінің 02h функциясын пайдаланылады. Ол курсордың мәтіндік координаттарының орын орнатады және графикалық режимде шығарылмайды. Сондай-ақ экран бетіне шығарылған символдар графикалық және мәтіндік режим дәл сол орынға түседі. Мәтіндік жолға графикалық координаттың белгісімен шығаруға және бағыттарын өзгертуге болмайды. Символдардың кескін үйлесімі (конфигурация) кодты кестеден алынады. Басқа символдардың өлшемін немесе кескін бейнесін шығару үшін кодты кестені сәйкестендіріп дайындау керек немесе символды қолмен салу қажет. Кең көлемдегі белгіленген көптеген қолдаңбалы програмалардың
(TURBO PASCAL-дің графикалық жүйелері және PAINT BRUSH графикалық редакторы ) осындай тәсілдері бар.
Графикалық бейнелерді програмалау кезінде BIOS видеодрайверінің функциясын пайдалануға болады. Олар төмендегідей:
00h- видеорежимді орнату;
05h- видеопарақтарды орнату;
0ch- пикселді шығару;
0fh- видеорежимді алу;
10h, функция асты 00h- реңдік регистрді орнату;
10h, функция асты 01h- экрандағы шеткі түсті орнату;
10h, функция асты 02h- түрлі түсті регистрдің палитрасын орнату;
11h, функция асты 21h- графикалық режимде пайдаланушының кесте шрифтімен толтыру. Осы аталғандардан басқа көптеген шектеулі функциялар пайдаланылады.(мысалы графикалық позициядағы пикселді оқу)
00h функциясы видеожүие режиміне ауысып, қосуға рұқсат береді. Көлемі 256кб видеобуферлі EGA адаптерінін мәтіндік режимдегі коды- 03, ал графикалық режимдегі коды-10h.
Екі режимді де тұрақты пайдаланушы 0Fh функциясы ағымдағы арқылы видеорежимді (және де ағымдағы видеопарақты) анықтау керек және алынған нәтижеге байланысты ауыстырып қосу режимін немесе парақтарды бағалау қажет.
05h функциясы видеопарақты қосады. Парақтың нөмірі AL регистіріне кіргізіледі. 10h режимінде (EGA) 0-ші және 1-ші парақтарды пайдалануға болады. Сол басқа бейне белсенді парақты ауыстырып қосу кезінде жоғалып кетпейді, өйткені видеоадаптерде әрбір параққа арналған бөлек блокты жадылар бар. Сурет салу үшін жалғыз 0Ch- пикселді шығару функциясы қарастырылған.(еске түсірейік, DOS-та графиканы қолдайтын функция мүлдем жоқ ) . AL регистріне пиксел түсінің мәні, BH регистріне беттің нөмірі, CX және DX- X және Y регистрлеріне пиксел координаттарына лайықты жіберіледі. X-тің координатасы 0 ден 639 дейін, ал Y- тің координатасы 0 ден 349 дейін өзгереді. (0,0) нүктесіндегі координатасы экранның сол жақтағы жоғарғы бұрышына сәйкес келеді.
Экрандағы пикселдердің түстері және фонның түстері регистрдің түстерінің ішіндегісімен беріледі және олар видеорежимінің палитрасымен анықталады. EGA адаптерінде 17 түсті регистрлер бар, олардың әрбіреуі 0 ден 63дейінгі 64 түсті кодты құра алады. 0 ден 15-ке дейінгі регистр пикселдің мүмкін болатын түстерін анықтаса, ал экрандағы рамка түсінің бүкіл жұмыс бөлігінің айналасын 16-шы регистрді анықтайды, бірақ бұл рама көрінбейді, өйткені, оған фонға сәйкес келетін түсті меншіктейді. Берілген програмадағы кодтың түсін (мысалы, 0Ch функциясы AL регистріне арналған) түс емес, экранға шығару кезіндегі берілген пикселдің пайдаланушы жүйесінің регистр түсінің нөмірі анықтайды.
Әрбір реңдік регистр 6 разрядтан тұрады және олар интенсивті қызыл, жасыл және көк түстерді араластырғанда керек түсті беріп, анықтайды. 2/3максимады интенсивті қызыл, жасыл және көк түстер 0-шы,1-ші және 2-ші разрядқа, ал 1/3 интенсивті со түстер 3-ші, 4-ші және 5-ші разрядқа бекітілген.
Разрядтың нөмірі 5 4 3 2 1 0
разрядтың салмағы 32 16 8 4 2 1
Түсі қ Ж к Қ Ж К
Солайша, регистрде жазылған 1(К)-саны көк түсті, 2(Ж)-саны жасыл түсті, Ж(Ж+C)-көк-жасыл түсті, 9(к+К)-ашық-көк түсті, 7(Қ+К+Ж)-ақты, 63саны (қ+к+ж+Қ+К+Ж)-ашық ақ түстрді анықтайды.
Инициализацияау кезінде келесі сандар қатары енгізіледі:
регистрлер 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
құрамы 0 1 2 3 4 5 20 7 56 57 58 59 60 61 62 63 0
Бұл тізім түрлі түсті стандартты палитраны құрайды. Програмадағы 6-шы түсті код экранға коңыр түсті бейнені шығарады. 6-шы регистрде 20 саны жазылғандықтан, ол қоңыр (қызыл мен жасыл араласқан) түсті анықтайды. Егерде 6-шы реңдік (цветовой) регистрге, мысалы, 40-ты жазып қойсақ, онда барлық 6-шы түсті кодқа ашық қызыл бейне шығарылады. 6-шы регистрдегі 12-ші сан жазуы экранға барлық қоңыр түсті нүктелерді малина(қызыл мен көк араласқан) түсіне ауыстырады.
Солайша, реңдік регистрлердің өзгеруі экрандағы түстердің бейнелерін тез арада ауыстыруға рұқсат береді. Мысалы: бейнені салқын көк-жасыл гаммаға немесе жылы қызыл сарыға ауыстыруға мүмкіндік береді. Стандартты палитраны қайта келтіру күйін автаматтандырылған проектеу жүйесінде және ғылыми-техникалық қосымшаларындағы географикалық картаны немесе көлемді бейнелерді кейде экранға шығару кезінде пайдаланылады. Реңдік палитраның өзгеру мүмкіндігі нортындық утилит пакетінде қарастырылған.
0-шы реңдік регистр фонның түсін анықтайды. Фонның түсі графикалық режимінде инициализацилау кезі видеобуфердің ұйымдарына 0 жазылып, экранға толтырылады. Солайша, бастапқы 0-шы код басқа түсті бейне кодымен ауыспай тұрғандағы экранның бөлігін фон деп атайды. Програмадағы көрсетілген 0-шы код түсі басқа элементтің бейнесін шығару кезінде фонның регистрлік жүйесін пайдалануға алып келеді, соның нәтижесінде сол элемент көрінбейтін болып шығады. Түрлі түсті фонға қара бейнені шығару үшін қандайда бір реңдік регистрге 0-ды жазу керек және бейне шығар алдында сол регистрдің нөмірін көрсету қажет. Сол арада түстерді ауыстырып қосу тез арада орындалады. BIOS құралымен пикселдерді шығару, процессордың жай жасау кезінде пикселмен бірнеше жүз микросекунд уақытты қажет етеді. Ал барлық экранды толтыру үшін 1-2 минутты қажет етуі мүмкін. Сондықтанда, графикалық пакеттер негізінде BIOS функциясымен емес, графикалық адаптермен жұмыс жасау тиімді.
1.2. Графикалық режимдегі програмалау есептері
Есеп 1.1. Экранға графикалық бейнені шығару. Графикалық режимді орнату және экранның ортасына түрлі түсті тіктөртбұрышты шығару. Програманы түзеткеннен кейін графикалық режимде шығарылған нүктенің жылдамдығын анықтау қажет.
• Програманың негізгі фрагменттері
• Draw (подфункция) тіктөртбұрышты қылып шығару
• Ішкі параметрлері- x,y,xsize,ysize,forcolor
• xcrnt, ycrnt бағыныңқы програмасын пайдаланып, осы айнымалыларды модифициалайды.
draw Proc AX,y инициализацияау
Mov ycrnt ycrnt
Mov CX,ysize y-б-ша санауыш
Mov CX стекте сақтау
loopy Push AX,x инициализацияау
Mov xcrnt,AX xcrnt
Mov CX,xsize х-б-ша санауыш
Mov CX стекте сақтау
loopx Push AH,0Ch пикселді шығару функциясы
Mov AL,forcolor пикселдің түсі
Mov BH,0 0-шы парақ
Mov CX,xcrnt ағымдағы графикалық бағана
Mov DX,ycrnt ағымдағы графикалық жол
Int 10h
Inc xcrnt оңға жылжу
Pop CX х-б-ша санауышты қалпына келтіру
Loop loopx
Inc ycrnt солға жылжу
Pop CX у-б-ша санауышты қалпына келтіру
Loop loopy
Ret програмшадан шығу
draw Endp
• Негізгі програманың басы
...
• Графикалық режимді орнату
mov AH,0 режимді орнату функциясы
mov AL,10h 10h режимі графикаға тең
int 10h
• Тіктөртбұрышты пикселмен салу
...
• Call draw
• Прграманы тоқтау
...
• Мәліметтер алаңы
x dw 200 Х-координатасының басы
y dw 100 Y-координатасының басы
xcrnt dw 0 ағымдағы Х-координатасы
ycrnt dw 0 ағымдағы У-координатасы
xsize dw 200 Х-б-ша тіктөртбұрыштың өлшемі
ysize dw 100 У-б-ша тіктөртбұрыштың өлшемі
forcolor Db 14 сары түс
Есеп 1.2. Реңдік палитраны оқу. Экранға 16 қатарлы төртбұрыштан мүмкін болатын түстердің (төртбұрышты 0-шы реңдік регистр анықтайды және ол көрінбейді ) шығару қажет. Төртбұрыштың ішіне түсі әртүрлі ұзын сызықты салу қажет және реңдік регистрдің нөмірі 1ден15 дейін көрсетілуі керек. Сонымен қатар, циклға 0,1,2,…63 дейінгі регистр сандарын кіргізіп, жоғарда айтылған сызықтың түсін өзгертіп отыру қажет. Бақылауға ыңғайлы болу үшін, біріншіден, циклды тоқтату програмасына күту пернесін басып қосу қажет, ал екіншіден, әрбір түстңі ауыстырар алдында модификация жасалынған реңдік регистрдің құрамын экранға шығару қажет. Програманы отладка жасап болғаннан кейін түстердің ауысып отыруын бақылап, модификацияланған реңдік регистрдің құрамын талдау қажет.
• Програманың негізгі фрагменттері
• Draw proc
• Тіктөртбұрыштың шығару бағыныңқы програмасы
...
• Draw endp
• Негізгі програманың басы
• Графикалық режимді орнату
• Тіктөртбұрышты пикселмен салу
mov CX,16 түстердің санауышы
rect: push CX стекте сақтау
call draw тіктөртбұрышты салу
inc forcolor келесі түс
add X,40 келесінің басы
pop CX санауышты қалпына келтіру
loop rect
• Ұзын сызықты салу. Бұл үшін пайдаланып отырған draw бағыныңқы програмасының параметрлер мәндерін өзгерту.
mov X,0
rect: mov y,60
mov xsize,635
mov ysize,40
mov forcolor,4 4-ші регистрмен салу
• Сызықты салу
• Call draw
• Програманы тоқтату
mov AH,0Ch күту функциясын енгізу
mov AL,08h жаңғырықсыз филтрді енгізу
int 21h
• Циклдың 4-ші регистріндегі 0 ден 63 дейінгі түсті ауыстыру
mov CX,64 түстердің санауыштары
back: push CX оны сақту
mov AH,0h 10h функциясы
mov AL,0 функцияастының түсін орнату
mov BH,4 4-ші регистрдегі қызыл түс
mov BH,palette түстің нөмірі
int 10h
• Түстің нөмірің шығару үшін:
1. mes деген мәліметті шығару үшін мәтіндік курсорды қалаған жерге орнату.
mov AH,02h курсорды орнату функциясы
mov BH,0 0-шы парақ
mov DH,10 жолдың нөмірі
mov DL,10 бағана нөмірі
Int 10h
2.түс нөмірінің адрес символына қайта құрастырылуы.Table кестесінде көрсетілген.
mov AL,palette AL-дағы түс нөмірі
xor AH,AH AH-ты тазалау
add AX,AX AX-ты 2-ге көбейту
mov SI,AX индекстік регистрге жөнелту
mov BX,offset table кестеге кіргізу
mov AX[BX][SI] AX-қа кестедегі нөмірді кіргізу
mov number,AX оны number-ге жөнелту
3. Экранға нөмірді шығару
mov AL,40 шығару функциясы
mov BX,1 шығарудың стандартты дискрипторы
mov CX,meslen мәліметің ұзындығы
mov DX,offset mes жолдың адресі
Int 21h кестеге кіргізу
• Түсті өзгерту
Inc palette келесі түс
pop Cx түстердің санауышын қалпына келтіру
• Програманы тоқтату
...
• Мәліметтер алаңы
X dw 0 Х-координатасының басы
Y dw 20 Y-координатасының басы
Xcrnt dw 0 ағымдағы Х-координатасы
Ycrnt dw 0 ағымдағы У-координатасы
Xsize dw 35 Х-б-ша тітөртртбұрыштың өлшемі
Ysize dw 40 У-б-ша тіктөртбұрыштың өлшемі
forcolor dw 0 пикселдің түсі
Palette dw 0 палитра түсінің екілік нөмірі
Mes db ‘ағымдағы түстің нөмірі 4-ші регистрде:'
number dw символдық формадағы түстің нөмірі
Meslen=$-mes
Символдық формада мүмкін болатын түстер нөмірлерінің кестесі
Көңіл бөліңіздер, төмендегі сандардың барлығы екі байттан орын алады.
table db ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘7’ ‘8’ ‘9’
db ‘10’ ‘11’ ‘12’ ‘13’ ‘14’ ‘15’ ‘16’ ‘17’ ‘18’ ‘19’
db ‘20’ ‘21’ ‘22’ ‘23’ ‘24’ ‘25’ ‘26’ ‘27’ ‘28’ ‘29’
db ‘30’ ‘31’ ‘32’ ‘33’ ‘34’ ‘35’ ‘36’ ‘37’ ‘38’ ‘39’
db ‘40’ ‘41’ ‘42’ ‘43’ ‘44’ ‘45’ ‘46’ ‘47’ ‘48’ ‘49’
db ‘50’ ‘51’ ‘52’ ‘53’ ‘54’ ‘55’ ‘56’ ‘57’ ‘58’ ‘59’
db ‘60’ ‘61’ ‘62’ ‘63’
Есеп 1.3. Фонның түсін өзгерту. Экранға 16 қатарлы төртбұрыштан мүмкін болатын түстерді шығару. Циклға 0-ші регистрдегі 0,1,2,..63-ке дейінгі сандарды кіргізіп, фонның түсін өзгерту қажет. Мына бір нәрсеге мән беру қажет. Пикселмен салынған тіктөртбұрышты бейнелердің түсін, фонның түсімен салыстыру қажет. Мына бір нәрсеге мән беру қажет: ең сол жақтағы төртбұрыштың түсі О-ші регистрде берілгендіктен, ол фонның түсі қандай болсада ол көрінбейтін қалыпта қала береді.
• Программаның негізгі фрагменттері
• Тіктөртбұрыштың шығару бағыныңқы програмасы
• Негізгі програманың басы
• Графикалық режимді орнату
• Тіктөртбұрышты салу
• Програманы тоқтату
• Циклдағы фонның түсін 0-ден 63 дейін өзгерту.
mov CX,64 Түстердің санауышы
back: push CX Оны сақтау
mov AH,0 10h функциясы
mov
AL,0 Түстің функцияастын орнату
mov BL,0 Фонның 0-ші регистрі
mov BH,palette Түстің нөмірі
int 10h
• Түстің нөмірін шығару
...
• Програманы аяқтау
...
Есеп 1.4. Реңдік гамманы өзгерту. Экранға 16 қатарлы тіктөртбұрышты мүмкін болатын түстерді шығару қажет. 10һ функциясы арқылы 02һ функцияастына тізбектей 4 әртүрлі палитраны беру қажет. Бір палитра, мысалы, көк гамманы құраса, келесісі қызылды, үшіншісі жасылды және төртіншісі сары гамманы құрай алады. әрбір палитрадағы фонның түсі және .....
Мақала ұнаса, бөлісіңіз:
Ұқсас мақалалар:
» Курстық жұмыс: Бағдарламалау | Турбо Паскальдың графикалық мүмкіндіктері
» Курстық жұмыс: Экономика | Паскаль жүйесіндегі графика
» Курстық жұмыс: Бағдарламалау | Турбо-Паскальдағы графикамен жұмыс
» Курстық жұмыс: Бағдарламалау | Турбо Паскаль жүйесіндегі графика. Жұмыс істеп тұрған бағдаршамның бейнесін шығару
» Курстық жұмыс: Анимация құру
» Курстық жұмыс: Бағдарламалау | Турбо Паскальдың графикалық мүмкіндіктері
» Курстық жұмыс: Экономика | Паскаль жүйесіндегі графика
» Курстық жұмыс: Бағдарламалау | Турбо-Паскальдағы графикамен жұмыс
» Курстық жұмыс: Бағдарламалау | Турбо Паскаль жүйесіндегі графика. Жұмыс істеп тұрған бағдаршамның бейнесін шығару
» Курстық жұмыс: Анимация құру
Іздеп көріңіз: