Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Обработка текстовой и графической информации

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Пример 12. Рисование поверхности объекта (фрагменты программы)
cВнеслиэлемент«хаоса».Повернулирисунок,уменьшили cразмерыисдвинулиповертикалиипогоризонтали d=0.325*wx1*kdf*jgra r=sqrt(j**2+i**2+200.0) =dasin(j/r) =+d r=r*(0.01+2.*sin(kdf/0.2)) aaa=0.7*(iwx-400)/1500. jjjk=r*dsin()*aaa iiik=r*dcos()*aaa jjjk=jjjk+25*kdf*sin(kdf/0.7) iiik=iiik+15*kdf*cos(kdf/0.7) cНарисовалинаэкранеточку(белыеточкипропускаем) if(Red1.lt.250.and.Green1.lt.250.and.Blue1.lt.250) *dummy4=setpixelrgb(jjjk+iwx,iiik+iwy,iii) 805continue
802continue cКонецперебораточекмаркеров(пример) return end
161
Впримере маркеры размещаются вокруг базовой точки графика ско-
ординатами (iwx, iwy). Исходные графики вданном примере представ- ляли собой синусоиды. Творческие личности легко могут использовать эти приемы для реализации своих идей. Точки (iwx, iwy) могут быть заданы втабличном виде, например при задании формы облака, дерева ит.п., асами контуры объекта могут быть прорисованы спомощью мар­керов самого разного вида, например снежинок, роз, звездочек идр. Ес­ли используется много видов маркеров, например 100 видов, то впро­грамме удобнее применять многомерные массивы colorpix(6400,100) ссоответствующими поправками.
Если имеется заставка на заднем фоне рисунка, то используются про-
цедуры вида:
162 Глава 2. Обработка графической информации
integer(1)buffer(80000) cНарисоваливлевомверхнемуглуэкрана(0,0)заставкудля cрисованияграфика i4=loadimage(zastawka,0,0) cЗапомнилиуголэкрана(частьзаставки)вбуфере callgetimage(0,81,81,0,buffer) cпослерисованиямаркеров(ониприопределениикомпонент cцветаразмещалисьвуглуэкрана)вернулиизбуфера c(восстановили)поврежденноемаркерамиизображениечасти cзаставки. callputimage(0,0,buffer,$gpset)
Результаты обработки фотографии с видом на озеро показаны на рис.18—20.
При формировании изображений (рис. 18—21) использовалась про­грамма, еще более простая, чем впредыдущем случае. Вцикле выделя­лась зона фотографии (заставка из рис. 12), немного изменялись компо­ненты цветов ее точек, далее, эта зона накладывалась на изображение в нескольких местах экрана с изменением размера и поворотом. На рис.19 дополнительно использовался прием искривления накладывае­мой зоны изображения (аналогично рис. 1). Меняя настройки изастав­ки, можно формировать различные изображения, от абстрактных (рис.18—20) до реалистичных (рис. 21). Аналогичные приемы могут ис­пользоваться при рисовании «пестрых» линий графиков, цветных бан­тов на подарочной упаковке ит.п.
Примеры демонстрируют, как с помощью операторов FORTRANа (вданном случае это всего лишь десяток операторов в цикле do 805 kdf=) можно быстро преобразить обычный график в декоративное изображение. Не каждый зритель способен догадаться, что рис. 12, 18, 19 и20 — это результаты обработки одной и той же фотографии (за­ставки). Ручная прорисовка множества деталей в любой коммерче­ской программе потребует определенных усилий. Вэтом же случае на изменения настроек графика потребовалось несколько минут, резуль­тат получен в течение нескольких секунд работы ПЭВМ. Трудоем-
Пример 12. Рисование поверхности объекта (фрагменты программы)
Рис. 18
163
Рис. 19
164 Глава 2. Обработка графической информации
Рис. 20. Результат обработки фотографии с видом на
озеро
Рис. 21. Результат обработки фотографии
Пример 13. Просмотр фильма (серии готовых рисунков вформате *.BMP)
165
кость такой обработки графиков незначительна. Что касается художе­ственных достоинств получаемых изображений, то они определяются вкусами автора, ане ограничениями языка программирования. При желании можно создавать намного более сложные композиции, оста­ваясь врамках FORTRANа. Конечно же, пытаться рисовать подобным образом картины встиле «старых мастеров» вряд ли уместно. Это тре­бует наличия таланта, знаний итрудолюбия. Использование графиче­ских программ может быть полезным лишь на начальных этапах, при выборе вариантов композиции. Что касается современных жанров (декоративное искусство, абстрактное и т.п.), то большинство про­граммистов без особого труда могут их освоить, апринтеры позволят «на века» закрепить удачные «произведения» на холсте, добавив кчер­ному и красному квадратам серо-буро-малиновый и какой угодно другой квадрат.
Пример 13. Просмотр фильма
(серии готовых рисунков в формате *.BMP)
usedib PARAMETER(MXBLOK=2048) record/wxycoord/s record/rccoord/curpos character(5)resnt character(1)lmmm(31)
cВариантвыборарисунковизтекущейдиректории ccharacter(9)lm cequivalence(lmmm(23),lm) ccharacter(6)resnt6 ccharacter(1)resnttt(6) cequivalence(resnt6,resnttt(1)) cdatalm/".bmp"/
166 Глава 2. Обработка графической информации
cВариантвыборарисунковиздругойдиректории, cнапример,c:\ggggg\obj\dob\lm\ character(31)lm equivalence(lmmm(1),lm) character(6)resnt6 character(1)resnttt(6) equivalence(resnt6,resnttt(1)) datalm/"c:\ggggg\obj\dob\lm\00000.bmp"/
integer*4i4,okno,okno1,okno2 type(qwinfo)qw qw.type=qwin$max i4=setwsizeqq(qwin$framewindow,qw)
cВариантвыборарисунковизтекущейдиректории copen(unit=1,le='00000.bmp')
cВариантвыборарисунковиздиректорииc:\ggggg\obj\dob\lm\ open(unit=1,le='c:\ggggg\obj\dob\lm\00000.bmp')
cВфайле00000.bmpхранитсяцифроваяинформация,например, cчислокадров. cВфайлах00001.bmp,00002.bmp,….хранятсякадры(рисунки cформата*.bmp).
cОткрываемокна okno1=3 OPEN(UNIT=3,FILE='user') qw.x=0 qw.y=0 qw.h=60 qw.w=160 qw.type=qwin$set
okno=okno1
Пример 13. Просмотр фильма (серии готовых рисунков вформате *.BMP)
cСчитываниечислакадровфильма read(1,*)nwrem cАктивноеокно i4=setactiveqq(okno) cОкно,выведенноенаэкран i4=focusqq(okno)
nt=0
cПереборкадровфильма do6001nttt=1,100000 nt=nt+1 cЕсликадрыкончились,повторяемфильмсначала if(nt.gt.nwrem)nt=1
306format(i6) cФормируемимяискомогокадрафильма(имяфайла*.bmp), cкотороехранитсявсимвольнойпеременной«lm» nt6=nt+100000 write(resnt6,306)nt6 lmmm(23)=resnttt(2) lmmm(24)=resnttt(3) lmmm(25)=resnttt(4) lmmm(26)=resnttt(5) lmmm(27)=resnttt(6) cЗагрузкаобраза(рисунка) i4=loadimage(lm,0,0) cЗадержканаэкранекадраповремени,например,на100ms callsleepqq(100) 6001continue stop end
167
При медленной загрузке кадров сносителя снизкой скоростью пере-
дачи данных вслучае выполнения дополнительных процедур, замедляю­щих процесс формирования кадра, целесообразно использовать два ок-
168 Глава 2. Обработка графической информации
на (одно показываем, вдругое загружаем следующий кадр). По оконча­нии формирования кадра окна меняются местами. При большом количестве кадров, медленной работе программы задержка может быть убрана или задано меньшее значение времени задержки.
Создание фильмов, кадры которых собраны из файлов *.BMP
В процессе решения различных нестационарных задач могут созда­ваться исохраняться на жестком носителе информации рисунки *.BMP, количество которых может достигать многих сотен итысяч. Эти рисун­ки— кадры фильма *.BMP могут демонстрироваться средствами языка FORTRAN. Однако их хранение требует значительного объема памяти ЭВМ, что при большом количестве кадров нерационально. Чаще всего оказывается целесообразным перевести их вдругой, сжатый формат. На­пример, вдиректории с именем c:\dob\film находятся файлы фильма сименами: 00001.bmp, 00002.bmp, …, *.bmp, созданные средствами язы­каFORTRAN. ВFORTRANе предусмотрена поддержка только формата *.BMP. При желании ина FORTRANе можно написать программы пере­вода файлов срисунками вдругие форматы. Некоторые приемы сжатия изображений рассмотрены в[14]. Но проще воспользоваться уже готовы­ми решениями сторонних производителей, так как обычно нет необхо­димости сжатия информации еще впроцессе вычислений иэту процеду­ру можно выполнить после завершения работы программы. Например, для создания фильма (сименем Kino.avi), который проигрывает впоряд­ке возрастания номеров имен файлы (кадры) *.BMP, можно воспользо­ваться программой VirtualDub.exe.
Для этого:
1. Находим ивыбираем вдиректории файл VirtualDub.exe инажима­ем кнопку «Enter».
2. Выбираем File, Open Video file.
Открыли директорию c:\dob\film с кадрами фильма (файлами)
*.BMP.
3. Вводим имя 00001.bmp инажимаем «открыть».
4. File Save as AVI.
Пример 13. Просмотр фильма (серии готовых рисунков вформате *.BMP)
169
5. Вводим имя Kino.avi.
6. Нажимаем кнопку «Сохранить».
После выполнения этих действий программа создала фильм с име­нем Kino.avi, который сохранился в той же папке, где ранее располага­лись кадры фильма (файлы) *.BMP. При этом существенно сокращается занимаемая фильмом память.
Заключительные замечания
Представленные в книге фрагменты программ предназначены для де-
монстрации простых приемов решения типовых задач. Используя ана-
логичные подходы, применяя более сложные структуры языка, читатели
могут самостоятельно создавать свои версии программ, оптимизиро-
ванные иадаптированные к решению собственных задач. Впримерах
показано, что даже вслучаях применения лишь части из существующих
средств языка FORTRAN можно реализовать практически все замыслы
по графической обработке информации.
Втехнических приложениях излишне сложное меню, многочислен­ные окна ипестрые графики затрудняют работу спрограммой, снижают производительность и служат источниками дополнительных ошибок. Мелькающие на экране сообщения отвлекают внимание. Поэтому при разработке таких программ следует соблюдать баланс между красотой оформления, возможностями графической программы иудобством ее использования. Не стоит заниматься излишним «украшательством». Важно сократить количество нажатий всевозможных кнопок ипереме­щений курсора до минимально необходимого, ограничить количество видов представления данных ивариантов их обработки. Графики долж­ны быть однозначными, простыми ипонятными. В противном случае программа станет слишком громоздкой, труднообозримой инеудобной для пользователя.
Если удобство отображения данных и трудоемкость вычислений не являются решающими факторами и интересуют лишь изобра­зительные возможности программы, то на первый план вы­двигаются другие требования. Тогда вид программы определяется пред­почтениями автора. С помощью операторов dummy=setcolor(0) и dummy=rectangle_w($gfillinterior,x1,y2,x2,y1) можно пополнить ряды художников-абстракционистов. Имея фотографию одного расте­ния, несложными преобразованиями можно изобразить поле подсолну­хов, следуя другому классику жанра. Более сложные пейзажи потребуют
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]