Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Обработка текстовой и графической информации
.pdf
Пример 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)
805continue
802continue
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Запомнилиуголэкрана(частьзаставки)вбуфере
callgetimage(0,81,81,0,buffer)
cпослерисованиямаркеров(ониприопределениикомпонент
cцветаразмещалисьвуглуэкрана)вернулиизбуфера
c(восстановили)поврежденноемаркерамиизображениечасти
cзаставки.
callputimage(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)
usedib
PARAMETER(MXBLOK=2048)
record/wxycoord/s
record/rccoord/curpos
character(5)resnt
character(1)lmmm(31)
cВариантвыборарисунковизтекущейдиректории
ccharacter(9)lm
cequivalence(lmmm(23),lm)
ccharacter(6)resnt6
ccharacter(1)resnttt(6)
cequivalence(resnt6,resnttt(1))
cdatalm/".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))
datalm/"c:\ggggg\obj\dob\lm\00000.bmp"/
integer*4i4,okno,okno1,okno2
type(qwinfo)qw
qw.type=qwin$max
i4=setwsizeqq(qwin$framewindow,qw)
cВариантвыборарисунковизтекущейдиректории
copen(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Переборкадровфильма
do6001nttt=1,100000
nt=nt+1
cЕсликадрыкончились,повторяемфильмсначала
if(nt.gt.nwrem)nt=1
306format(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
callsleepqq(100)
6001continue
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) можно пополнить
ряды художников-абстракционистов. Имея фотографию одного растения, несложными преобразованиями можно изобразить поле подсолнухов, следуя другому классику жанра. Более сложные пейзажи потребуют
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
