Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Обработка текстовой и графической информации
.pdf
Пример 12. Рисование поверхности объекта (фрагменты программы)
151
применения трудоемких операций рисования объектов по точкам. Все
параметры процедур обработки заставок можно запоминать и хранить
для повторного использования вотдельных массивах. Параметры могут
изменяться по времени. Например, можно хранить координаты загрузки заставки на экран, координаты по глубине рисунка, ее преобразования (сжатие по вертикали игоризонтали, угол поворота, коэффициенты
изменений компонент цветов точек) и др. Объем этой информации намного меньше объема фильма, даже после архивации. Но она позволяет
во многих случаях обеспечить такое же качество изображения. Кроме
того, изменив базовые файлы с заставками (например, фотографию
осенней березы заменили фотографией зимней сосны), можно быстро,
сминимальными затратами получить другое изображение. Для анимации изображений во многих случаях достаточно управлять координатами загрузки, углами поворота иразмерами заставок. Все эти процедуры
легко могут быть запрограммированы на FORTRANе.
При желании можно воспроизвести понравившиеся процедуры об-
работки рисунков, реализованные в коммерческих программах
(CorelDRAW, Photoshop идр.). Вэтих программах многие процедуры уже
детально проработаны иусовершенствованы вмногочисленных версиях. Возникает лишь вопрос о целесообразности такого рода копирования. Более продуктивной представляется реализация своих идей
и алгоритмов, которые направлены на решение собственных задач.
В частности, если ставится задача создания программы, реализующей
оригинальные художественные замыслы, то имеет смысл более точного
воспроизведения реальных технологий рисования свыделением отдельных этапов. Например:
1. Выбор цвета красок. Художники часто используют сочетания раз-
личных красок при выборе нужного цвета. Например, красный
ичерный воспроизводят коричневый цвет, синий ижелтый— зе-
леный цвет ит.п. При этом полностью краски не смешиваются.
Кисть переносит на холст случайные сочетания пятен разного
цвета, что создает требуемую фактуру изображения.
2. Выбор степени прозрачности наносимого слоя краски. Существу-
ют техники рисования, предусматривающие нанесение многочис-
ленных слоев полупрозрачных покрытий.

152 Глава 2. Обработка графической информации
3. Выбор кисти. Кисти различаются размерами, формой, жесткостью, степенью износа. Эти параметры влияют на стиль рисования, на создаваемую фактуру изображения.
4. Выбор количества краски на кисти (может использоваться «полусухая» кисть).
5. Выбор наклона, направления движения, силы удара кисти.
Существуют идругие особенности технологий создания изображений
(покрытие лаком, искусственное состаривание, температурная обработка, химическое травление, использование перьев, скребков, оригинальных инструментов идр.). Не все, но многие из них можно имитировать
программными средствами, в том числе с помощью перечисленных
вглаве приемов. Наиболее простым вариантом получения реалистических изображений являются применение заставок, полученных сканированием фрагментов рисунков, выполненных по реальным технологиям
(акварель, масло ит.п.). Применение «маски» рисунка, управление яркостью, контрастностью изображения, насыщенностью цвета создают дополнительные возможности по реализации творческих замыслов автора.
Ниже приведены некоторые простые приемы оформления рисунков
с помощью маркеров изаставок. Можно использовать различные видызаставок имаркеров. Форму, размеры, цвета, их количество ирасположение можно менять вшироких пределах. Впримерах использованы
готовые изображения четырехзаставок ичетырех маркеров (вформате
*.BMP). Заставки представляют собой фотографии. Их размеры не
должны превышать размеры экрана. Вкачестве маркеров вданном случае использованы фотографии объектов на белом фоне уменьшенного
размера (80×80). Точки маркеров белого цвета на графиках не рисовались. Цвета, размеры иположения маркеров менялись входе выполнения программы. Если требуется изобразить объекты белого цвета (например, ромашки, белые розы), то нужно использовать контрастный
черный фон. При рисовании таких маркеров пропускаются темные точки изображения спомощью оператора вида (например)
if(Red1.lt.20.and.Green1.lt.20.and.Blue1.lt.20)goto805
dummy4=setpixelrgb(jjjk+iwx,iiik+iwy,iii)
805continue

Пример 12. Рисование поверхности объекта (фрагменты программы)
Рис. 10. Графики, построенные с использованием маркеров
153
Рис. 11. Графики, построенные с вращениями маркеров вокруг базовых точек

154 Глава 2. Обработка графической информации
Рис. 12. Графики, построенные на фоне заставки
Рис. 13. Изменили заставку, добавили вращения и повторы маркеров

Пример 12. Рисование поверхности объекта (фрагменты программы)
Рис. 14. Изменили параметры вращения маркеров
155
Рис. 15. Изменили цвета маркеров

156 Глава 2. Обработка графической информации
Рис. 16. Изменили заставку на заднем плане, размеры, количество, цвета и рас-
положение маркеров
Рис. 17. Изменили заставку на заднем плане. Периодически переставляли мар-
керы графиков (см. цв. рис. на форзаце в конце книги)

Пример 12. Рисование поверхности объекта (фрагменты программы)
Подпрограмма рисования маркеров на графике с вносимыми эле-
ментами «хаоса» может иметь вид (пример)
cРисованиесимволовграфикаспомощьюмаркеров.
cjgra-номерграфика,
citg-номерточкиграфика,
cwx1,wy1-координатыточкиграфика,
cxx1,xx2,yy1,yy2-координатыокна,
cpolelew,polepraw,polewerh,poleniz-поляграфика.
subroutinesimwolgraf(jgra,itg,wx1,wy1,xx1,xx2,yy1,yy2
*,polelew,polepraw,polewerh,poleniz)
usedib
implicitreal*8(a-h,o-z)
logical*2true/.true./
integer*2dummy,maxx,maxy,BOUNDARY
cразмерыэкрана(например,ix2,iy2=1600*1200)
integer*2ix2,iy2
common/ekran/ix2,iy2
157
cПеременные,используемыедляуправленияцветамиточек
cэкрана
integer*4Red,Green,Blue
integer*4RGB,Red1,Green1,Blue1,Red2,Green2,Blue2,dummy4
cРазмерымаркеровприняты80*80=6400точек
integer*4colorpix1(6400),colorpix2(6400)
integer*4colorpix3(6400),colorpix4(6400)
cУказываемименамаркеров-файловсфотографиями
cвформате.bmp
character*(12)mark1,mark2,mark3,mark4
datamark1/"mark1.bmp"/
datamark2/"mark2.bmp"/
datamark3/"mark3.bmp"/
datamark4/"mark4.bmp"/

158 Глава 2. Обработка графической информации
cОпределилицветаточекмаркеров
if(jgra.ne.4)goto50
if(itg.gt.2)goto50
cПереборвсехмаркеровграфиков(определяемцветаточек)
do55jgr=1,4
cБелыйверхнийлевыйуголэкрана(закрасилиполемаркера)
dummy=setcolor(15)
i4=rectangle($gllinterior,0,81,81,0)
cНарисоваливлевомверхнемуглуэкрана(0,0)маркер
cдлярисованияграфика
if(jgr.eq.1)i4=loadimage(mark1,0,0)
if(jgr.eq.2)i4=loadimage(mark2,0,0)
if(jgr.eq.3)i4=loadimage(mark3,0,0)
if(jgr.eq.4)i4=loadimage(mark4,0,0)
cОпределяемцветаточекмаркеранаэкране(вданномпримере
c80*80=6400pixel)
npix=6400
cРазмерымаркера
j1=1
j2=80
i1=1
i2=80
kkkpix=0
cПереборвсехточекмаркера(нарисованноговлевомверхнем
cуглуэкрана0,0)
do801j=j1,j2
do801i=i1,i2
kkkpix=kkkpix+1
cНашлиномерцветаточки(RGB)
RGB=getpixelRGB(j,i)
cЗапомнилиэтотцветвмассивеcolorpix(6400)
if(jgr.eq.1)colorpix1(kkkpix)=RGB
if(jgr.eq.2)colorpix2(kkkpix)=RGB
if(jgr.eq.3)colorpix3(kkkpix)=RGB
if(jgr.eq.4)colorpix4(kkkpix)=RGB

Пример 12. Рисование поверхности объекта (фрагменты программы)
801continue
55continue
cКонецпереборвсехмаркеровграфиков(определяемцвета
cточек)
50continue
cНаходимположениеверхнеголевогоугламаркеранаграфике
xxx=dabs(xx2-xx1)
yyy=dabs(yy2-yy1)
iwx=ix2*(polelew*xxx/(1+polelew+polepraw)+wx1)/xxx
*-80/2
iwy=iy2*(yyy*(1+polewerh)/(1+polewerh+poleniz)-wy1)/yyy
*-80/2
cПереборвсехточекмаркера(впримере80*80точек)
kkkpix=0
cПереборточекпогоризонтали
do802j=j1,j2
cПереборточекповертикали
do802i=i1,i2
kkkpix=kkkpix+1
159
cНаходимкомпонентыцветовточекмаркераграфика(jgra):
cRed-значениеинтенсивностикраснойкомпоненты,
cGreen-значениеинтенсивностизеленойкомпоненты,
cBlue-значениеинтенсивностисинейкомпонентыцветаточки.
if(jgra.eq.1)RGB=colorpix1(kkkpix)
if(jgra.eq.2)RGB=colorpix2(kkkpix)
if(jgra.eq.3)RGB=colorpix3(kkkpix)
if(jgra.eq.4)RGB=colorpix4(kkkpix)
cccДругойвариантрисованиямаркеров:
citg-номерточкилинииграфика.
cВариантсчередованиемразличныхмаркеровнаоднойлинии
cграфика
ck=itg

160 Глава 2. Обработка графической информации
c66if(k.gt.4)k=k-4
cif(k.gt.4)goto66
ccccНарисовалимаркерграфика
cif(k.eq.1)RGB=colorpix1(kkkpix)
cif(k.eq.2)RGB=colorpix2(kkkpix)
cif(k.eq.3)RGB=colorpix3(kkkpix)
cif(k.eq.4)RGB=colorpix4(kkkpix)
ccccccccccccccccccccccccccccccccccccccccc
cНашликомпонентыцветаточкимаркера
callintegertoRGB(RGB,Red1,Green1,Blue1)
cИзменилицвет
aaa=(iwx-350)/600.
if(aaa.lt.0.75)aaa=0.75
if(aaa.gt.1.0)aaa=1.0
Red=Red1*aaa
Green=Green1*aaa
Blue=Blue1*aaa
cПроверяемвыполнениеограниченийдляновогоцвета
if(Red.lt.0)Red=0
if(Red.gt.255)Red=255
if(Green.lt.0)Green=0
if(Green.gt.255)Green=255
if(Blue.lt.0)Blue=0
if(Blue.gt.255)Blue=255
cНовый,измененныйцветточки(iii)
iii=setcolorrgb(rgbtointeger(Red,Green,Blue))
cСдвинулиположениезаставкинаэкране(j+iwx,i+iwy—новые
cкоординатыточки).
cНарисовалимаркервцикле15развокругбазовойточки
do805kdf=1,15
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
