close

Вход

Забыли?

вход по аккаунту

?

FreeBASIC26

код для вставкиСкачать
Пособие по программированию на языке FreeBASIC с примерами. Для старшеклассников и младшекурсников, а также их преподавателей.
1
Евгений Рыжов, инженер
Программирование на языке FreeBASIC
пособие для начинающих
Пособие для начинающих программировать на языке высокого уровня FreeBASIC,
состоит из множества фрагментов, каждый из которых, надеюсь, представляет интерес
для старшеклассников и младшекурсников, а также их преподавателей.
Фрагмент 26. "Нарисую ту страну..."
...
Краски яркие возьму
И закрашу серый цвет.
Нарисую ту страну,
Где для слёз причины нет,
Где улыбки каждый день,
Где почти всегда весна,
Где у всех, у всех людей
Очень добрые глаза.
...
2
Детская песня "Мир, который нужен мне" (Я рисую этот мир).
Музыка Александра Ермолова.
Слова Сергея Золотухина.
Детскую песню "Мир, который нужен мне" можно послушать по ссылке:
https://www.youtube.com/watch?v=eb1lkb0ehNA
Таня и Маша Медведевы прекрасно исполнили песню
молодого талантливого композитора.
Продолжительность: 00:03:25
Александр Владимирович Ермолов
родился 26 ноября 1977 года в
Одинцовском районе Московской
области. С декабря 2007 года – член
Союза Композиторов России, добрый и
веселый человек...
3
Содержание
1.
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.1.
Общие слова . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.2.
Сопутствующие события . . . . . . . . . . . . . . . . . . . . . . .
7
2.
Графические возможности FreeBASIC . . . . . . . . . . .
16
2.1.
Расцвечивание пикселей изображения . . . . . . . . . . .
16
2.2.
Простейшие демонстрационные программы . . . . .
22
2.2.1.
Программа выделения частей байтов и слов . . . . .
22
2.2.2.
Программа определения параметров экрана . . . . .
24
2.2.3.
Программа построения треугольника . . . . . . . . . . .
25
2.2.4.
Программа использования экрана . . . . . . . . . . . . . .
27
2.2.5.
Программа градаций серого цвета . . . . . . . . . . . . . .
28
2.3.
Простой графический вывод . . . . . . . . . . . . . . . . . . .
29
2.3.1.
Узор из окружностей . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2.
Узор из треугольников . . . . . . . . . . . . . . . . . . . . . . . . .
31
2.3.3.
Улетающий квадрат . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
2.3.4.
Моделирование видимого спектра . . . . . . . . . . . . . .
33
2.4.
На память, на добрую память... . . . . . . . . . . . . . . . . .
40
2.4.1.
Спрячем изображение в файл . . . . . . . . . . . . . . . . . . . 40
2.4.2.
Достанем изображение из файла . . . . . . . . . . . . . . . .
42
3.
Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4
1. Предисловие.
Не надо быть профессиональным искусствоведом, чтобы заметить, сколь
различаются "благие пожелания" детей из песни и "суровый взгляд" художника
сотворившего картину, размещенную в начале брошюры... И это понимание возникло
не сегодня. Уже для эпохи Просвещения, одной из ключевых эпох в истории
европейской культуры, связанной с бурным развитием научной, философской и
общественной мысли, характерно рассмотрение искусства в его связях с наукой
(познание истины) и нравственностью (воспитание добра). Именно тогда возникла
идея триединства "истина — добро — красота", а основное назначение и сущность
искусства определялось его познавательной функцией. Относительно датировки
данной мировоззренческой эпохи единого мнения не существует. Можно, например,
считать началом эпохи Просвещения выход в свет работы Рене Декарта (1596-1650)
философского трактата "Рассуждение о методе" (1637), а концом - смерть в (1778)
одного из величайших французских философов-просветителей XVIII века Вольтера
(Франсуа Мари Аруэ, 1694-1778)...
1.1. Общие слова.
Говоря об искусстве нельзя не вспомнить
достойного представителя эпохи
Просвещения - Дени Дидро (Denis
Diderot; 1713—1784) — французского
писателя, философа-просветителя и
драматурга, основавшего
"Энциклопедию, или Толковый словарь
наук, искусств и ремёсел" (1751),
иностранного почётного члена
Петербургской академии наук (1773).
Портрет Дени Дидро (1767)
В настоящей брошюре тоже приведу его высказывание об искусстве, но в
отличие от тысячи публикаций его приводящих, с точным указанием источника
цитирования, а именно: комедия в прозе в пяти актах "Побочный сын или Испытания
добродетели" [01].
5
[01, с. 142] Беседа третья.
Назавтра небо замутилось. Туча, предвещающая грозу, остановилась над холмом и
погрузила его в мрак...
[01, с. 168] ...Здесь Дорваль остановился, затем он продолжал: "Долговечны лишь те
красоты, которые основаны на связи с созданиями природы. Если представлять себе
эти создания постоянно и изменяющимися, то, так как всякая живопись передает лишь
мгновение, всякое подражание было бы ненужно. Красота в искусстве имеет то же
основание, что истина в философии. Что такое истина? Соответствие наших суждений
созданиям природы. Что такое подражательная красота? Соответствие образа
предмету".
"И тут Остапа понесло..."
Илья Ильф и Евгений Петров
роман "Двенадцать стульев" (1928)
и 4-серийный художественный фильм,
снятый Марком Захаровым (1976).
Фрагмент фильма "Остапа понесло! Васюковский турнир"...
можно посмотреть по ссылке:
https://www.youtube.com/watch?v=LVT1prlbGPI
Продолжительность 00:06:41
Художник ничего не изобретает, однако он наделен более острым зрением,
нежели обычный человек, который самостоятельно не может увидеть "истинную
природу" самого человека. Познавая, искусство морализирует, становится "школой
нравственности", воспитывает гражданина. Познавательная природа искусства
становится основой выполнения искусством не только морально-воспитательной, но и
идеологической функции. Аргумент "от природы", ссылка на бесстрастное
копирование художником существующих объективных тенденций оказывается
наиболее убедительным в процессе идеологического воздействия. Человек
представляет собою только то, что из него делают общий строй воспитания и смена
фактов; каждое действие человека есть акт, необходимый в сцеплении актов, и каждый
из этих последних так же неизбежен, как восход солнца.
Не всякое живописное изображение принадлежит искусству - например,
различные наглядные учебные пособия, ботанические и биологические таблицы с
тщательными красочными изображениями цветов, бабочек, зверей, птиц и т.п.
Точность изображения натуры сама по себе еще не создает произведения искусства,
оно возникает лишь в том случае, когда изображение становится художественным
образом, в котором тот или иной предмет или явление освещается мыслью и чувством
человека-творца. Художественный образ - это сердцевина всякого искусства, поэтому
говорить об особенностях живописи - значит говорить об особенностях
художественного образа в этом виде искусства. Первое, над чем необходимо
задуматься, состоит в том, что живопись, как и все изобразительные искусства, не
может передать движение и развитие жизни во времени, как это делает литература или
кино. Но в этой ограниченности живописи есть своя сила и свои возможности,
недоступные другим искусствам, В жизни непрерывно возникают моменты,
положения, которые нам хотелось бы остановить, удержать навсегда, и мы готовы, как
Фауст, воскликнуть:
"...Мгновение! Прекрасно ты, продлись, постой!"
6
В оценке работы художника неявно просматривается концепция "Человек не
может представить того, чего не может быть", но художники не теряют надежды
вырваться за пределы концепции. И старательно придумывают то, чего в принципе не
может быть - эдакое что-то что вообще и абсолютно чуждо устоявшейся реальности.
Но это сложно, если оперировать лишь знакомыми и привычными терминами,
понятиями и объектами; они пытаются "совместить несовместимое" или
трансформировать опять же какой-то знакомый объект, но принципиально нового и
принципиально невозможного не выходит... А платят художникам лишь за выполнение
заказ от разрушителей человеческого общества:
Исхитрись-ка мне добыть
То-Чаво-Не-Может-Быть!
Запиши себе названье,
Чтобы в спешке не забыть!
А не выполнишь к утру В порошок тебя сотру,
Потому как твой карахтер
Мне давно не по нутру!
Так что неча губы дуть,
А давай скорее в путь!
Государственное дело Ты ухватываешь суть?
Сказка для театра "Про Федота-Стрельца, удалого молодца" (1988)
Автор: Леонид Алексеевич Филатов (1946—2003) — советский и
российский актёр театра и кино, кинорежиссёр, поэт, писатель,
публицист, телеведущий, Народный артист Российской Федерации.
А что же, спросит читатель, в науке? Сэр Карл Раймунд Поппер (1902—1994,
австрийский и британский философ и социолог) одним из первых приступает к
разработке теории роста научных знаний. Он отказывается рассматривать эти знания
как абсолютно достоверные и полагает, что вся наука имеет гипотетический
(предположительный) характер, а, следовательно, не застрахована от ошибок. Как же
развивается наука? Ученые выдвигают гипотезы, в которых эмпирические и
теоретические знания неразрывно связаны. Постепенно они опровергаются новыми
фактами, и им на смену приходят новые, более смелые гипотезы. Так происходит
расширение и углубление научного знания. Теория является научной не за счет своих
гипотез, догадка может быть высказана в научной или художественной форме, а за счет
того, что выдерживает тесты, направленные на ее опровержение. Теория, которая не
может быть проверена (т.е., верифицируема), не является научной.
7
Хорошо, что содержание брошюрки не выходит за рамки проблемы
технического обслуживания "изобразительного искусства" (искусства запечатления
статических образов и их последовательностей в случае фильма) — вида
художественного творчества, целью которого является воспроизведение окружающего
мира. Понятие объединяет различные виды живописи, графики и скульптуры. Среди
видов изобразительного искусства особое место занимают технические виды:
 Фотография,
 Медиаискусство,
 Компьютерная графика...
Привычно сошлемся на подручный источник знаний - "ВикипЕдию":
https://ru.wikipedia.org/wiki/Компьютерная_графика
Компьютерная графика (машинная графика) — область деятельности, в которой
компьютеры, оснащенные специальным программным обеспечением, используются в
качестве инструмента, как для создания (синтеза) и редактирования изображений, так и
для оцифровки визуальной информации, полученной из реального мира, с целью
дальнейшей её обработки и хранения.
Применение методов и средств информатики возможно во всех тех областях
человеческой деятельности, в которых существует принципиальная возможность (и
необходимость) регистрации и обработки информации. По этому поводу существует
справедливое высказывание: "Применение вычислительных машин ограничено
только рамками нашей фантазии". Сейчас трудно назвать такую сферу деятельности
человека, в которой не применяют или не пытаются применить современные
информационные технологии.
1.2. Сопутствующие события.
Почему начал писать брошюрку под названием "Нарисую ту страну..."?
Открою секрет – причины две:
1. молодой человек, начинающий программировать на FreeBASIC, прислал письмо
с вопросами по "рисованию на компьютере". После обсуждения решили
вопросы не публиковать, но часть ответов разместить в брошюре...
2. стали утомлять бесконечные обсуждения "прогрессивной общественностью"
проблем связанных с художественными выставками. Видимо, все другие
проблемы уже решены. Попробую показать, что и проблемы художественных
выставок могут быть решены "волевым актом"...
Милости прошу на мини-вернисаж!
https://ru.wikipedia.org/wiki/Вернисаж
Вернисаж - (фр. vernissage, буквально — "покрытие лаком") — открытие в
торжественной обстановке художественной выставки, на которой присутствуют
специально приглашённые лица. Название родилось из традиции французских
художников перед открытием своей выставки покрывать картины лаком для большего
визуального эффекта.
8
Для поднятия настроения приглашаю послушать песню "Вернисаж" (1986):
https://www.youtube.com/watch?v=lHWTRukNXvI
(фрагмент концерта Раймонда Паулса)
Исполнители: Вайкуле Лайма Станиславовна и Леонтьев Валерий Яковлевич
музыка: Паулса Раймонда Вольдемаровича
стихи: Резника Ильи Рахмиэлевича
Продолжительность: 00:03:45
К слову напомню про "вернисаж" 1937 года в Германии... "Дегенеративное
искусство" (Entartete Kunst) — термин нацистской пропаганды для обозначения
авангардного искусства, которое представлялось не только модернистским,
антиклассическим, но и еврейско-большевистским, а потому опасным для нации и для
всей арийской расы. Понятие дегенеративных (вырожденческих) произведений
искусства ввёл Макс Нордау (Симха Меер Зюдфельд; 1849—1923) в трактате
"Вырождение" (1892). Идеологическая дискредитация, запрет и уничтожение образцов
"дегенеративного искусства", прямые репрессии против его создателей составляли
значимую часть более широкой культурной политики гитлеровского режима. Своё
отношение к авангардному искусству Гитлер выразил в своей книге "Mein Kampf". За
борьбу против данного вида искусства отвечал министр народного просвещения и
пропаганды Йозеф Геббельс (Paul Joseph Goebbels; 1897—1945), а по данному
направлению — президент палаты изобразительных искусств Адольф Циглер.
9
Примечание 1: Выставка под названием "Дегенеративное искусство", на которой было
представлено около 650 произведений, конфискованных в 32 музеях
Германии, открылась 19 июля 1937 в здании галереи в парке
Хофгартен через день после открытия "Большой германской
художественной выставки" в мюнхенском "Доме немецкого
искусства".
А вот недавно, 19 мая 2017 года, картина кисти американского художниканеоэкспрессиониста Жан-Мишеля Баския продана на вечерних торгах современного
искусства Sotheby's в Нью-Йорке за $110,5 млн. Как сообщили в аукционном доме, эта
сумма стала рекордом продажной цены работ Баския. Ажиотаж коллекционеров
вызвала не имеющая названия картина работы 1982 года. Итоговая цена почти вдвое
превысила оценочную стоимость после того, как в течение десяти минут "битву" за
право стать владельцем произведения вели несколько потенциальных покупателей.
Победителем торгов стал известный японский миллиардер, основатель крупнейшего в
Японии интернет-магазина стильной одежды Юсака Маэдзава. Предприниматель
заверил, что картина Баския будет размещена в музее его родного города Тиба. "Когда
я увидел эту картину, меня просто захлестнули эмоции и чувство благодарности за
возможность ощущать любовь к искусству, - пояснил свое решение Маэдзава
представителям аукционного дома. - И я очень захотел, чтобы как можно больше
людей во всем мире смогли испытать подобные переживания - независимо от их
возраста и происхождения, а также того, являются ли они коллекционерами или нет".
"Эта картина займет центральное место музея в моем родном городе Тиба, но до этого я
планирую показать ее всему миру, на разных выставках и экспозициях, поскольку она
оставалась недоступной для публики более 30 лет, - пояснил предприниматель. - Я
очень надеюсь, что картина доставит столько же радости людям, как и мне, и что этот
шедевр 21-летнего Баския послужит вдохновением еще для многих наших будущих
поколений". В последний раз эта картина Жан-Мишеля Баския выставлялась на торги в
1984 году, еще при жизни автора. Тогда она была продана за $19 тысяч.
10
В середине мая 2017 года картина Казимира Малевича "Супрематическая
композиция с полоской в проекции" ушла с молотка на торгах аукционного дома
Sotheby's в Нью-Йорке за $21,2 миллиона при оценочной стоимости $12-18 миллионов.
Картина Малевича стала самым дорогим лотом данного аукциона.
Казимир Северинович Малевич (1879—1935) — российский и советский
художник-авангардист польского происхождения, педагог, теоретик искусства,
философ. Основоположник супрематизма — одного из наиболее ранних проявлений
абстрактного искусства новейшего времени.
Большим разочарованием для организаторов аукциона стало снятие с аукциона
ранней картины Эгона Шиле "Даная". Предварительная оценка данной работы
австрийского живописца составляла $30-40 миллионов. Эгон Шиле (Egon Schiele;
1890—1918) — австрийский живописец и график, один из ярчайших представителей
австрийского экспрессионизма. Напомню: Даная — в древнегреческой мифологии дочь
Акрисия, царя Аргосского, и Евридики (или Аганиппы), мать Персея. Впервые
упомянута в «Илиаде» (XIV 319).
11
Эгон Шиле "Даная"
Этому художнику посвящен художественный фильм:
Название: Эгон Шиле – Скандал (Egon Schiele – Exzesse)
Выпущено: Франция, Австрия; 1980
Режиссер: Херберт Весели
Жанр: Драма, биография
Продолжительность: 01:29:15
Художник Эгон Шиле, живущий вместе со своей бывшей натурщицей Валли, однажды
становится жертвой недоразумения, когда по ложному наговору влюблённой в него
юной девушки арестовывается и обвиняется в совращении несовершеннолетней.
Если хотите поближе познакомиться с Данаей – ниже приведена картина
Густава Климта (Gustav Klimt; 1862—1918) — широко известного австрийского
художника, основоположника модерна в австрийской живописи. Главным предметом
его живописи было женское тело и большинство его работ отличает откровенный
эротизм.
Этому художнику посвящен художественный фильм:
Название: Климт (Klimt)
Выпущено: Германия Франция Великобритания Австрия; 2006
Режиссер: Рауль Руис
Жанр: Драма, биография
Продолжительность: 01:33:29
В центре картины – история страсти Климта к Лиа де Кастро, его борьбы за творческую
независимость, его близкая дружба со знаменитым художником Эгоном Шиле и
платонические отношения художника с Эмили Флеге, протянувшиеся через всю его
жизнь.
И уж совсем убого смотрится канонический для более поздних художников
Ренессанса образ Данаи созданный Тицианом Вечеллио (Tiziano Vecellio; 1488—
1576) — итальянский живописец, крупнейший представитель венецианской школы
эпохи Высокого и Позднего Возрождения.
12
Густав Климт "Ланная"
Тициан "Даная"
13
На этот мифологический сюжет Тициан написал 4 картины, из которых
неаполитанская "Даная" — самая ранняя. Другие три "Данаи" находятся в мадридском
"Прадо" (1553), венском "Kunsthistorisches Museum" (1554) и петербургском
"Эрмитаже" (1554).
Но вот что интересно: бок о бок (во времени) с Казимиром Малевичем жил
русский художник Борис Дмитриевич Григорьев (1886, Россия — 1939, Франция).
В 1903—1907 учился в Центральном Строгановском художественно-промышленном
училище (класс Д.А.Щербиновского, а также у А.Е.Архипова), затем в качестве
вольнослушателя посещал петербургскую Академию художеств (до 1913), где
занимался у А.А.Киселёва и Д.Н.Кардовского. С 1907 жил в Петербурге, в 1909-м
посетил родственников матери в Швеции, в 1913-м впервые посетил Париж, где
прожил четыре месяца и создал цикл работ на темы парижской жизни. Живя вдали от
родины, Григорьев продолжал иллюстрировать произведения знаменитых русских
писателей (серия рисунков к "Детству" М.Горького, 1931; цикл к "Братьям
Карамазовым" Ф.М.Достоевского, 1932—1933), принимал участие во многих выставках
в 1909—1919 годах - представитель "левых" течений в авангарде. О себе он говорил
так: "Сейчас я первый мастер на свете... Я не боюсь любого конкурса, любого заказа,
любой темы, любой величины и любой скорости". И только в 2011 году состоялись его
выставки в Русском музее и в Третьяковской галерее. К слову: Казимиру Малевичу
государство устроило пышные похороны в Одинцовском районе. Чудно...
Около 7 лет назад коллекционер и врач-психиатр Андрей Васильев (из
поселка Комарово под Петербургом) купил за 250 тысяч долларов картину Бориса
Григорьева "В ресторане". 250 тысяч — для Григорьева не потолок. Васильеву картина
понравилась, и он купил ее без письменного заключения экспертизы. То, что это
подделка выяснилось случайно, когда коллекционер представил ее на выставке.
Оказалось, что подлинник спокойно хранится в запасниках русского музея.
Григорьев "В ресторане"
14
Полагаю, из господ инженеров мало кто слышал о замечательном художнике,
хотя многие его картины известны всем - ниже приведены две его картины из
Государственного Русского Музея (С-Петербург):
Григорьев: портрет Всеволода Мейерхольда (1916)
(Меерхольд изображен в роли Денди и в роли Лучника)
15
Григорьев: Земля народная (1917)
(Из цикла "Расея")
К 120-летию со дня рождения Бориса Дмитриевича Григорьева, замечательного
художника, все еще недостаточно оцененного на родине, вышли из печати две книги:
одна — обширная монография Тамары Галеевой, максимально полно представляющая
его живописные и графические работы, другая — впервые знакомит читателя с
литературным наследием мастера...
16
2. Графические возможности FreeBASIC.
Проблема восприятия внешнего мира с помощью органов зрения — одна из
интересных естественнонаучных проблем. Но гораздо интереснее проблема
интерпретации данных, получаемых от органов зрения и слуха мозгом человека
(выделение из потока данных нужной информации)... Однако вернемся на "грешную
землю" и будем рассматривать исключительно "Машинную графику", как средство
графического представления научно-технической информации, поток которой
нарастает лавинообразно. Как сделать, чтобы ученые и инженеры могли выловить из
этого потока максимум полезных для себя сведений, постоянно были в курсе
достижений в своей области, чтобы усилия, затраченные на добывание знаний,
использовались обществом с наибольшим эффектом? Этот вопрос обсуждается в книге
известного американского художника-графика Уильяма Дж. Боумена [02]. Недаром
говорят, что один рисунок стоит тысячи слов, но при условии, что рисунок хороший...
В научно-технической литературе хорошая графика встречается, к сожалению, еще
слишком редко.
2.1. Расцвечивание пикселей изображения.
Хорошо ли, плохо ли, но о графических возможностях языка FreeBASIC уже
было сказано в брошюре "Фрагмент 18. Опустите ваши кисти..." Напомню, что в
качестве периферийного устройства компьютера в брошюре подразумевается
жидкокристаллический монитор (LCD display) L1942S-SF южнокорейской компании
LG Electronics, имеющий диагональ 19" (48.2 см) и шаг 0,294 пикселей/мм, что дает
(чисто теоретически) для стандартного соотношения сторон экрана 4:3 следующие
размеры:
диагональ
19" (48.26 см)
ширина
15.2" (38.61 см)
высота
11.4" (28.96 см)
В операционной системе установлено разрешение экрана 1280х1024 пикселей.
В главе 4 был упомянут цветовой треугольником Максвелла, представляющий собой
равносторонний треугольник, вершины которого соответствуют координатам основных
красного R (Red), зеленого G (Green) и синего B (Blue) цветов. Положение любого
цвета, образуемого путем смешения основных цветов, может быть определено с
помощью этого треугольника. Чтобы не потерять свою "выразительную силу"
изображение не может и не должно быть одноцветным! Одноцветность хороша бывает
только в песне:
Ирма Сохадзе; "Оранжевая песня"
Текст: Арканов А., музыка: Певзнер К.
https://www.youtube.com/watch?v=zXsGDdLKIW8
Продолжительность 00:02:58
Вот уже два дня подряд, я сижу рисую Красок много у меня, выбирай любую;
Я раскрашу целый свет
В самый свой любимый цвет...
17
Цветовая палитра (палитра цвета) — фиксированный набор (диапазон) цветов
и оттенков, имеющий физическую или цифровую реализацию в том или ином виде
(например, атлас цветов, системная цветовая палитра, Московская цветовая палитра). В
переносном смысле — подбор цветов, характерный для живописной манеры данного
художника в определённый период его творчества.
Самая простая программка, демонстрирующая "цветовые" возможности FreeBASIC,
приведена ниже:
'
P R O G R A M "GR_Graph"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация "цветовых" возможностей FreeBASIC
'------------------------------------------------------------' Самый простой "цветной" вывод
#Lang "FB"
' режим совместимости с FreeBASIC
Screen 12
Dim As Integer i
For i = 0 To 15
Color i
Print Using " ##"; i
Next i
Sleep
Программа выводит в столбик целые числа от 0 до 15, цвет каждого из которых
совпадает с цветом соответствующим номеру в стандартной палитре цветов.
На всякий случай напомню:
Оператор Screen устанавливает режим вывода данных на экран монитора. В
программе он используется для инициализации QBasic-подобного графического
режима:
Screen mode [, [depth] [, [num_pages] [, [flags] [, [refresh_rate]]]]]
Параметры:
18
mode - номером режима экрана. Если mode равен 0, тогда графический режим закрыт, и
все функции работают в режиме консоли.
depth - глубина цвета в битах на пиксель. Используется для режимов 14 и выше.
Допускаются значения 8, 16 и 32.. Если этот параметр опущен, по умолчанию 8.
num_pages - количество используемых видеостраниц. Если этот параметр опущен, по
умолчанию 1.
flags - используются для выбора нескольких возможностей, таких как графический
драйвер, полноэкранный режим. Есть константы, предопределенные в файле fbgfx.bi и
готовые к использованию.
refresh_rate - запрашивает частоту обновления. Если она не доступна в видеокарте или
параметр опущен, FreeBASIC автоматически выбирает частоту.
active_page - используется для установки активной страницы, когда команды
печати/рисования вступают в силу.
visible_page - используется для установки видимой страницы, которая показывается
пользователю.
colormode - не используется, разрешен для совместимости с синтаксисом QB.
Оператор Color устанавливает цвет дисплея для переднего плана/фона, который
используется в консольном выводе и выводе текста в графическом окне.
[result = ]Color [( [foreground] [, background] )]
Параметры:
foreground - цвет переднего плана, чтобы установить
background - цвет фона, чтобы установить
result - Возвращает 32-битное значение Integer содержащее текущий цвет переднего
плана в Low Word(младшее слово), а текущий цвет фона в High Word(старшее слово).
Кроме того, в программах используются операторы:
Оператор Sleep ожидает, пока не истечет заданное время, или до нажатия
клавиши.
[ result = ]Sleep ( amount, keyflag )
Параметры:
amount - необязательное количество миллисекунд для ожидания (по умолчанию
используется ожидание нажатия клавиши).
keyflag - необязательный флаг; Значение 0 для нормального Sleep, и 1 чтобы указать,
что ожидание не может быть прервано нажатием клавиши.
result - возвращает 1 если keyflag не является допустимым значением (т.е. что-то
отличное от 0 или 1) для обозначения сбоя, или 0 в противном случае.
Оператор Cls очищает экран и в текстовых, и в графических режимах.
Cls [mode]
Параметры:
mode - числовая переменная со значением от 0 до 2. Если этот параметр опущен, по
умолчанию 1.
Если 0 - полностью очищает весь экран от текста и графики.
Если 1 - очищает графическую область просмотра, если она определена. В противном
случае очищает текстовую область просмотра.
Если 2 - очищает текстовую область просмотра.
19
Оператор ScreenInfo получает сведения о рабочем столе системы или о
текущем режиме графического экрана.
ScreenInfo [w] [, [h] [, [depth] [ , [bpp] [ , [pitch] [ , [rate] [, driver ]]]]]
Параметры:
w – ширина экрана в пикселях.
h – высота экрана в пикселях.
depth - глубина цвета в битах (может быть 1, 2, 4, 8, 16, 32).
bpp – количество байт на пиксель.
pitch - количество байт на сканируемой линии.
rate - частота обновления.
driver - имя используемого графического драйвера.
Рекомендуется хотя бы раз для используемого режима запускать программу:
'
P R O G R A M "GR_Graph"
'
01.09.2012
'------------------------------------------------------------'
Получение информации о текущем режиме экрана
'------------------------------------------------------------'
#Lang "FB"
' режим совместимости с FreeBASIC
Dim As Integer w, h
Dim As Integer depth
Dim As String driver_name
'
Screen 12
' Получение информации о текущем режиме
ScreenInfo w, h, depth,,,,driver_name
Print Str(w) + "x" + Str(h) + "x" + Str(depth);
Print " using " + driver_name + " driver"
Sleep ' ожидание нажатия клавиши
'
ScreenRes 640, 480
' Получение информации о текущем режиме
ScreenInfo w, h, depth,,,,driver_name
Print Str(w) + "x" + Str(h) + "x" + Str(depth);
Print " using " + driver_name + " driver"
Sleep ' ожидание нажатия клавиши
' Отмена графических режимов и получение информации о рабочем
столе
Screen 0
ScreenInfo w, h, depth
Print "Desktop running at " + Str(w) + "x" + Str(h) + "x" +
Str(depth);
Print: Print " Press to complete!!!"
Sleep
' Результат выполнения программы:
' Screen 12
' 640x480x4 using DirectX driver
' ScreenRes 640, 480
' 640x480x8 using DirectX driver
' Screen 0
' Desktop running at 1280x1024x32
20
Хочу особо подчеркнуть важность параметра depth - глубина цвета в битах
(битность изображения, которая может быть 1, 2, 4, 8, 16, 32), который тесно связан с
понятием "палитра".
Привычно сошлемся на подручный источник знаний - "ВикипЕдию":
https://ru.wikipedia.org/wiki/Палитра_(компьютерная_графика)
В компьютерной графике палитра — ограниченный набор цветов, доступный
графической системе компьютера. Палитра базируется на индексированных цветах. Из
огромного цветового пространства выбираются любые N цветов и их координаты
(обычно: R, G, B) хранятся в специальной таблице — палитре. Данные растровой
графики, использующие палитру, представляют собой массив, где хранятся номера
(индексы) цветов в палитре. Палитровые режимы — видеорежимы, в которых
каждый пиксель может принимать один из небольшого (от 2 до 256) количества цветов.
Видеопамять в таких режимах делится на две части: таблицу цветов (палитру), которая
содержит значения красного, зелёного и синего для каждого из цветов, и кадровый
буфер, в котором для каждого пикселя хранится номер цвета в палитре. Тот факт, что
палитру можно менять независимо от кадрового буфера, широко применяется в
видеоиграх для получения очень быстрых спецэффектов...
Не ошибусь, если скажу, что мори друзья по "инженерному корпусу" используют в
работе низко художественные режимы (depth):
 4-bit color (2^4 = 16 colors): использовался в мониторах EGA и продолжал
использоваться в мониторах VGA.
 8-bit color (2^8 = 256 colors): используется в поздних модификациях
мониторов VGA и в мониторах SVGA.
16-цветная палитра Усовершенствованного Графического адаптера (Enhanced
Graphics Adapter = EGA), с легкой руки фирмы IBM, стала стандартом "де-факто" для
персональных компьютеров с 1984 года. 16-цветная палитра представлена в таблице:
16-цветная палитра EGA устанавливаемая по умолчанию:
Номер и название
Hex
RGB
Dec
Цвет
#000000
000000
0 Black
0
Черный
#0000aa
000001
1 Blue
1
Синий
#00aa00
000010
2 Green
2
Зеленый
#00aaaa
000011
3 Cyan
3
Циановый
#aa0000
000100
4 Red
4
Красный
#aa00aa
000101
5 Magenta
5
Малиновый
#aa5500
010100
6 Brown
20
Коричневый
#aaaaaa
000111
7 Light gray
7
Светлый серый
#555555
111000
8 Dark gray
56
Темный серый
#5555ff
111001
9 Bright blue
57
Светлый синий
#55ff55
111010
10 Bright green
58
Светлый зеленый
#55ffff
111011
11 Bright cyan
59
Светлый циановый
#ff5555
111100
12 Bright red
60
Светлый красный
#ff55ff
111101
13 Bright magenta
61
Светлый малиновый
#ffff55
111110
14 Yellow
62
Желтый
#ffffff
111111
15 White
63
Белый
21
Оператор Palette настраивает цвета в режимах с палитрой цветов. Он
используется для получения или установки текущей палитры для графических
режимов. Возможно использование трех форм обращения к оператору:
Palette [Get] [index, color]
Palette [Get] [index, r, g, b]
Palette [Get] Using arrayname(idx)
Параметры:
Get – ключевое слово указывающее, что нужно получать информацию о палитре.
index - индекс палитры.
color - атрибут цвета.
r - красный компонент цвета.
g - зеленый компонент цвета.
b - синий компонент цвета.
Using - указывает на использование массива значений цветов.
arrayname(idx) - массив и индекс, чтобы получить/установить атрибуты цвета.
'
P R O G R A M "GR_Graph00"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подготовительных операций для графики
'------------------------------------------------------------' стандартные палитры
#Lang "FB"
' режим совместимости с FreeBASIC
Screen 12
' 4-битный цвет
'ScreenRes 640,480
' 8-битный цвет
Dim As UInteger Pal(0 To 255)
Dim As Integer i, r, g, b
'
' установка устройства вывода: консоль/файл
Open Cons For Output As #2
'Open "GR_Graph00.res" For Output As #2
Palette Get Using Pal
Print #2, "
i
R
G
B"
For i = 0 To 255 ' большой диапазон
' Screen 12
от 16 до конца RGB = 0, 0, 0
' ScreenRes 640,480 от 248 до конца RGB = 0, 0, 0
Palette Get i, r, g, b
Print #2, Using " Color ### = #### #### ####"; i; r; g; b
' так хорошо воспроизводятся все цвета палитры
Line( 0, 0)-(639,479), i, BF ' закраска экрана
Sleep
Next i
Close #2
Sleep
' Результат выполнения программы для режима Screen 12:
'
i
R
G
B
' Color 0 =
0
0
0
' Color 1 =
0
0 170
' Color 2 =
0 170
0
' Color 3 =
0 170 170
' Color 4 = 170
0
0
22
'
'
'
'
'
'
'
'
'
'
'
Color
Color
Color
Color
Color
Color
Color
Color
Color
Color
Color
5
6
7
8
9
10
11
12
13
14
15
=
=
=
=
=
=
=
=
=
=
=
170
170
170
85
85
85
85
255
255
255
255
0
85
170
85
85
255
255
85
85
255
255
170
0
170
85
255
85
255
85
255
85
255
Для некоторых цветов 8-битного режима ScreenRes 640,480 не могу даже
придумать название... Ниже приведена программа, иллюстрирующая тезис о том, что
палитру можно менять независимо от содержимого кадрового буфера:
'
P R O G R A M "GR_Graph"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подмены цвета в палитре
'------------------------------------------------------------' замена цвета
#Lang "FB"
' режим совместимости с FreeBASIC
Screen 12
' 4-битный цвет
Color 15
' обычный вывод по умолчанию белый цвет
Print " Press any key to change my color!" ' белый текст
Sleep
' ожидание нажатия клавиши
' изменение цвета под индексом 15: белый - ярко-красный
Palette 15, &h00003F
' красный текст
Sleep
Выведенный на экран белым цветом текст после нажатия клавиши становится красного
цвета.
2.2. Простейшие демонстрационные программы.
Ниже представлены маленькие программы демонстрирующие простейшие
подготовительные операции для графического вывода. Следует иметь ввиду, что любое
изображение, выполненное в растровой графике, это всего лишь неслучайным образом
разбросанные точки неслучайного цвета.
2.2.1. Программа выделения частей байтов и слов.
В графических программах часто возникает необходимость в работе с
отдельными байтами и битами 16-разрядных слов (кодов). Эти операции выделены
отдельную группу и оформлены в виде макрокоманд (макросов), предварительно
исполняемых препроцессором компилятора FreeBASIC. Ниже приведен перечень
макросов, которые работают с битами и байтами чисел:
23
Макросы для манипуляции с битами:
 Bit - получает состояние отдельного бита в integer значении.
 BitReset - сбрасывает (очищает) бит для Integer значения.
 BitSet - устанавливает бит для Integer значения.
Макросы для манипуляции с байтами:
 LoByte - получает младший байт (LSB или lo-byte) для UInteger значений.
 HiByte - получает старший байт (MSB, или hi-byte) младшего слова (LSW, или
lo-word) для UInteger значения.
 LoWord - получает младшее слово (LSW, или lo-word) для UInteger значения.
 HiWord - получает старшее слово (LSW, или hi-word) для UInteger значения.
Ссылки на них можно найти в заголовочных файлах стандартной поставки
компилятора:
C:\Program Files\FreeBASIC\inc\windows.bi
' windows -- header translated with help of SWIG FB wrapper
#include once "win/windef.bi"
#include once "win/wincon.bi"
#include once "win/winbase.bi"
#include once "win/wingdi.bi"
#include once "win/winuser.bi"
#include once "win/winnls.bi"
#include once "win/winver.bi"
#include once "win/winnetwk.bi"
#include once "win/winreg.bi"
C:\Program Files\FreeBASIC\inc\win\windef.bi
' windef -- header translated with help of SWIG FB wrapper
#define LOWORD(l) cushort(cuint(l))
#define HIWORD(l) cushort((cuint(l) shr 16) and &hFFFF)
#define LOBYTE(w) cubyte(w)
#define HIBYTE(w) cubyte((cushort(w) shr 8) and &hFF)
При использовании указанных выше макрокоманд удобно использовать данные,
представляя их как данных типа UIntege. Здесь UInteger - 32-разрядный или 64разрядный тип данных целого числа без знака, в зависимости от платформы.
'
P R O G R A M "GR_Graph01"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подготовительных операций для графики
'------------------------------------------------------------'
' Выделение байтов из слова
#Lang "FB"
' режим совместимости с FreeBASIC
'
Dim N As UInteger
24
' Здесь представлено 32-разрядное кодирование:
N = &b10000000000000011111111111111111
' установка устройства вывода: консоль/файл
Open Cons For Output As #2
'Open "GR_Graph0.res" For Output As #2
'
Print #2,: Print #2, "
Using macros:": Print #2,
Print #2, " N is
"; N
Print #2, " Binary representation of N is
"; Bin(N)
Print #2, " Most significant word (MSW) of N is "; HiWord(N)
Print #2, " Least significant word (LSW) of N is "; LoWord(N)
Print #2, " Binary representation of the MSW is ";
Bin(HiWord(N))
Print #2, " Binary representation of the LSW is ";
Bin(LoWord(N))
Close #2
Print: Print " Press to complete!!!"
Sleep
' Результат выполнения программы:
'
Using macros:
' N is
2147614719
' Binary representation of N is
10000000000000011111111111111111
' Most significant word (MSW) of N is 32769
' Least significant word (LSW) of N is 65535
' Binary representation of the MSW is 1000000000000001
' Binary representation of the LSW is 1111111111111111
2.2.2. Программа определения параметров экрана.
Кроме уже рассмотренного выше оператора ScreenInfo, для начала систематического
использования графических функций и операторов компилятора FreeBASIC
желательно использовать "информационный" оператор ScreenList, который возвращает
параметры доступных стандартных режимов компьютерной системы:
Оператор ScreenList
result = ScreenList( [depth] )
Параметры:
depth - глубина цвета, для которой составляется список запрашиваемых режимов (в
настоящее время поддерживаются следующие значения: 8, 15, 16, 24 и 32).
result – результат обращения: 0, если в системе нет читаемых разрешений.
Первый вызов функции требует обязательного указания параметра depth, функция
возвращает низкое поддерживаемое разрешение для запрашиваемой глубины.
Дальнейшие вызовы функции ScreenList без аргументов возвращают следующие
разрешения. Когда разрешения более не доступны, ScreenList вернет 0.
Если result не равен нулю, то параметр result после выполнения оператора содержит
размер экрана:
 ширина экрана в High Word (старшая часть слова),
 высота экрана в Low Word (младшая часть слова).
25
'
P R O G R A M "GR_Graph02"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подготовительных операций для графики
'------------------------------------------------------------' Доступные графические режимы
#Lang "FB"
' режим совместимости с FreeBASIC
'
Dim As Integer mode, w, h
'
Open Cons For Output As #2
'Open "GR_Graph0.res" For Output As #2
Print #2,: Print #2, " Resolutions supported at 8 bits per
pixel:"
'
mode = ScreenList(8)
While (mode <> 0)
w = HiWord(mode)
h = LoWord(mode)
Print #2, Using " #### x ####"; w; h
mode = ScreenList()
Wend
'
Close #2
Print: Print " Press to complete!!!"
Sleep
' Результат выполнения программы:
' Resolutions supported at 8 bits per pixel:
' 640 x 480
' 800 x 600
' 1024 x 768
' 1280 x 720
' 1280 x 768
' 1280 x 800
' 1280 x 960
' 1280 x 1024
2.2.3. Программа построения треугольника.
Из геометрических фигур двумерная графика поддерживает только окружности
и прямоугольники, треугольники необходимо строить самому пользователю. Для
этого используется оператор рисования линии:
Line [target,] [[STEP] (x1, y1)]-[STEP] (x2, y2) [, [color][, [B|BF][, style]]]
или
Line (x2, y2) [, [color][, [B|BF][, style]]]
Параметры:
target - определяет буфер для рисования в нем.
STEP – указывает на использование относительные координаты.
(x1, y1) - начальные координаты отрезка.
26
STEP – используются относительные координаты.
(x2, y2) – конечные координаты отрезка.
color - атрибут цвета линии.
B|BF - задает режим прямоугольника | закрашенного прямоугольника.
style - стиль линии.
Для закраски треугольника может использоваться оператор Paint, который
"заливает" область, границы которой заданы бордюром заданного цвета.
Paint [target,] [STEP] (x, y)[, [paint][, [border_color]]]
Параметры:
target - определяет буфер для рисования.
STEP - указывает, что координаты относительны.
(x, y) - координаты пикселя, с которого начинается заливка.
paint - цвет атрибута или шаблон заливки (числовое значение указывает цвет, а строка
обозначает шаблон заливки).
border_color - граница цвета для заливки.
Нужно соблюдать правила закраски:
 Контур должен быть замкнут. Если в нем будет прокол хотя бы в одну экранную
точку, то вся "краска" вытечет и зальет экран.
 Контур должен быть одноцветен. Если составляющие даже замкнутого контура
разных цветов, то для компьютера эта ситуация аналогична разрыву. Будет
закрашен весь экран.
 Координаты точки закраски должны лежать внутри контура.
Если точка закраски попала в область вне контура, то закрасится весь экран, за
исключением самого контура (иногда это бывает нужно, но подобные случаи редки).
Ниже приведена программа на FreeBASIC для построения и закрашивания
треугольника:
'
P R O G R A M "GR_Graph03"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подготовительных операций для графики
'------------------------------------------------------------' Построение треугольника
#Lang "FB"
' режим совместимости с FreeBASIC
' блок исходных данных
Data 200, 100, 300, 400, 500, 100 ' координаты вершин
Data 300, 200
' координаты точки
Screen 12
' VGA-адаптер 640х480
Dim As Integer x, y, x1, y1, x2, y2, x3, y3
Read x1, y1, x2, y2, x3, y3
Read x, y
Line (x1, y1)-(x2, y2), 15
Line (x2, y2)-(x3, y3), 15
Line (x3, y3)-(x1, y1), 15
PSet (x, y), 14
' точка любого цвета кроме белого!
Paint (x, y), 1, 15
' закраска области
Sleep
27
Circle (x, y), 30, 15 ' белая окружность
Sleep
Paint (x, y), 4, 15
' красная заливка
Sleep
Программа выводит на экран синий треугольник с белым контуром (бордюром)
и заданными координатами вершин. После нажатия клавиши внутри треугольника
выводится окружность белого цвет. После очередного нажатия клавиши окружность
закрашивается красным цветом.
2.2.4. Программа использования экрана.
Ниже приведен пример случайным образом разбросанных по экрану точек,
правда, неслучайного цвета:
'
P R O G R A M "GR_Graph04"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подготовительных операций для графики
'------------------------------------------------------------' Программа "Звездное небо"
#Lang "FB"
' режим совместимости с FreeBASIC
' Здесь: Rnd() возвращает Double в интервале 0 <= Rnd < 1
'
28
Dim As Integer i, n
Dim As Double x, y
n = 1000
Screen 12
Cls
For i = 1 to n
x = Int(640*Rnd())
y = Int(480*Rnd())
PSet (x, y),14
Next i
' Вывод точки на экран
Line (1, 1)-(638, 478), 12, b ' красный прямоугольник
Sleep
Если немного пофантазировать, то точки можно разбрасывать не совсем
случайным образом, и цвет их сделать не совсем детерминированным...
2.2.5. Программа градаций серого цвета.
В деловой графика (особенно при отсутствии под рукой цветного принтера)
трехмерные изображения часто представляются различным градациями серого. Такие
изображения принято назвать полутоновыми. Тут может помочь функция RGB:
[result = ]RGB(red, green, blue)
Параметры:
red - значение красного компонента цвета
green - значение зеленого компонента цвета
blue - значение синего компонента цвета
result - комбинированный цвет.
Но у функции RGB есть нехорошее ограничение: она начинает работать
только при значениях depth >= 16, т.е. за бортом остаются все устаревшие режимы
экранов.
'
P R O G R A M "GR_Graph05"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подготовительных операций для графики
'------------------------------------------------------------' оттенки серого
#Lang "FB"
' режим совместимости с QBasic
ScreenRes 640, 480, 16 ' 16-битный цвет
Dim As UInteger Col
Dim As Single DC ' шаг цветности
Col = 255
' максимальное значение
Line( 0, 0)-(319,479),RGB(Col, 0, 0),BF' ярко-красный
прямоугольник слева
Line(320, 0)-(639,479),RGB( 0, 0,Col),BF' ярко-синий
прямоугольник справа
Sleep ' пауза до нажатя клавиши
Line( 0, 0)-(319,479),RGB( 0, 0, 0),BF' черный
прямоугольник слева
29
Line(320, 0)-(639,479),RGB(Col,Col,Col),BF' белый
прямоугольник справа
Sleep ' пауза до нажатя клавиши
For DC = 0 To 1 Step 0.125' перебор градаций серого
Line( 0, 0)-(319,479),RGB(DC*Col,DC*Col,DC*Col),BF' от
черного к белоиу
Line(320, 0)-(639,479),RGB((1-DC)*Col,(1-DC)*Col,(1DC)*Col),BF' от белого к черному
Sleep 500 ' небольшая пауза
Next DC
Sleep
Подобное "моделирование серости" является избыточным, ведь уже при
значения depth = 8 цветовая таблица в интервале индексов от 16 до 31 содержит
набор оттенков серого...
В деловой графике может пригодиться штриховка экрана (области) наклонными
линиями. Вот программа:
'
P R O G R A M "GR_Graph06"
'
01.09.2012
'------------------------------------------------------------'
Демонстрация подготовительных операций для графики
'------------------------------------------------------------' Рисование сетки
#Lang "FB"
' режим совместимости с FreeBASIC
ScreenRes 640, 480, 16 ' параметры экрана
Dim As Integer x
' горизонтальная координата
Dim As UInteger Col
' интенсивность компоненты цвета
Col = 255
' все, что выходит за границы экрана игнорируется
For x = -480 To 639 Step 10
Line (x, 0)-Step(480, 480), RGB(Col, Col, Col)
' можно написать и так:
'
Line (x, 0)-(x+480, 480), RGB(Col, Col, Col)
Next x
Sleep
2.3. Простой графический вывод.
Простой графический вывод - это графика, основанная на графических
примитивах... В своей книге [03] Евгений Александрович Никулин из Нижегородского
государственного технического университета указывает место машинной графики:
В основании бесконечно развивающегося здания компьютерной графики
краеугольными камнями лежат фундаментальные дисциплины — аналитическая
геометрия и оптика, скрепленные раствором — искусством программирования.
Возникнув из потребностей рынка, развития информатики и вычислительной техники,
компьютерная графика изучает методы построения изображений различных
геометрических объектов и сцен. Главными этапами построения изображения
являются:
30


моделирование как искусство применения методов математического описания
объектов и сцен, природа которых может быть самой различной: обычные
геометрические фигуры и тела в двух- и трехмерном пространстве;
естественные явления природы — горы, деревья, облака и другие объекты;
огромные массивы чисел, полученных в различных экспериментах, и многое
другое;
визуализация (отображение) как искусство построения реалистичных
изображений объемного мира на плоском экране дисплея ЭВМ, заключается в
преобразовании моделей объектов и сцен в статическое изображение или фильм
— последовательность статических кадров.
По-сути в этой брошюре мы не прошли ни одного из указанных этапов –
"оставим не потом", а пока посмотрим примитивные программки, которые не требуют
никакой подготовки, но могут доставить удовольствие учащимся младших классов.
2.3.1. Узор из окружностей.
Оператор Circle графический оператор для рисования окружности или эллипса.
Его формат:
Circle [target,] [STEP] (x,y), radius[, [color][, [start][, [end][, [aspect][, F]]]]]
Параметры:
target - опционально; определяет буфер изображения, для рисования в нем.
STEP - указывает, что координаты относительны.
(x, y) - координаты центра эллипса.
radius - радиус окружности - или для эллипса, большая полуось (длинный радиус).
color - атрибут цвета.
start - начальный угол.
end - конечный угол.
aspect - соотношение сторон эллипса, соотношение высоты к ширине.
F - индикатор режима заливки.
'
P R O G R A M "GR_Graph1"
'
15.06.2014
'------------------------------------------------------------'
Простенькие графические программы на FreeBASIC
'------------------------------------------------------------' Узор из окружностей
#Lang "FB"
' режим совместимости с FreeBASIC
' объявление используемой подпрограммы
Declare Sub f(x As Integer, y As Integer, r As Integer, p As
Integer)
'
' Основной модуль программы:
Screen 12
Window (-320, 240)-(320, -240)
Dim As Integer x0, y0, r, p ' координаты центра, радиус,
кратность
x0 = 0: y0 = 0: r = 100: p = 4
31
f(x0, y0, r, p)
Sleep
'
' подпрограмма рисования окружностей
Sub f(x As Integer, y As Integer, r As Integer, p As Integer)
If p > 0 Then
Circle (x, y), r
f(x+r, y, r/2, p-1)
f(x, y-r, r/2, p-1)
f(x-r, y, r/2, p-1)
f(x, y+r, r/2, p-1)
End If
End Sub
На картинке вокруг большого круга группируются круги меньшего радиуса.
Каждый следующий шаг подготавливается в теле подпрограммы, что не слишком
удачно...
2.3.2. Узор из треугольников.
Коль скоро мы научились рисовать треугольник, то уж и узор из треугольников
нужно нарисовать. Что и делает программка, приведенная ниже (используется
заголовочный файл математических функций):
'
P R O G R A M "GR_Graph2"
'
15.06.2014
'------------------------------------------------------------'
Простенькие графические программы на FreeBASIC
'------------------------------------------------------------' Узор из треугольников
#Lang "FB"
' режим совместимости с FreeBASIC
#Include "crt/math.bi" ' математические функции
'
' объявление используемой подпрограммы
Declare Sub DRE(x As integer, y As Integer, r As Integer, p As
Integer)
'
' Основной модуль программы:
Dim As Integer x0, y0, r, p ' координаты центра, ребро,
кратность
x0 = 0: y0 = 0: r = 100: p = 4
Print M_PI ' Pi = 3.14159265358979323846
Screen 12
Window (-320, 240)-(320, -240)
DRE(x0, y0, r, p)
Sleep
'
' подпрограмма рисования треугольников
Sub DRE(x0 As Integer, y0 As Integer, r As Integer, p As
Integer)
32
Dim
Dim
C =
S =
As Integer x1, y1, x2, y2, x3, y3
As Single C, S
Cos(M_PI/6)
Sin(M_PI/6)
If p > 0 Then
x1 = x0 - r*C
y1 = y0 - r*S
x2 = x0 + r*C
y2 = y0 - r*S
x3 = x0
y3 = y0 + r
Line (x1, y1)-(x2, y2)
Line (x2, y2)-(x3, y3)
Line (x3, y3)-(x1, y1)
'
DRE(x1, y1, r/2, p - 1)
DRE(x2, y2, r/2, p - 1)
DRE(x3, y3, r/2, p - 1)
End If
End Sub
2.3.3. Улетающий квадрат.
Эта картинка может быть отнесена к разделу "простота и красота": рисунок
"Убегающий квадрат" на первый взгляд кажется достаточно сложным, но при более
внимательном рассмотрении оказывается, что он образован вложенными квадратами.
Вершины каждого следующего квадрата делят стороны предыдущего в заданном
отношении m. Таким образом, квадраты не только становятся все меньше и меньше, но
и поворачиваются на некоторый угол. Текс программы приведен ниже:
'
P R O G R A M "GR_Graph4"
'
15.06.2014
'------------------------------------------------------------'
Простенькие графические программы на FreeBASIC
'------------------------------------------------------------' "Улетающий квадрат"
#Lang "FB"
' режим совместимости с FreeBASIC
'
Dim As Integer X(3), Y(3), XD(3), YD(3)
Dim As Integer N, I, J, D, XL, YU
Dim As Double SMU, RMU
Screen 12
D = 400
' длина стороны внешнего квадрата
XL = 120: YU = 40 ' координаты его левого верхнего угла
N = 32
' количество квадратов на рисунке
X(0) = XL: X(1) = XL+D: X(2) = XL+D: X(3) = XL
Y(0) = YU+D: Y(1) = YU+D: Y(2) = YU: Y(3) = YU
SMU = 0.08: RMU = 1 - SMU
' вывод всех N квадратов
For I = 1 To N
' вычисление координат вершин очередного квадрата
33
For J = 0 To 3
XD(J) = RMU*X(J) + SMU*X((J+1) mod 4)
YD(J) = RMU*Y(J) + SMU*Y((J+1) mod 4)
Next J
' вывод очередного квадрат
For J = 0 To 3
Line (X(J),Y(J))-(X((J+1) Mod 4),Y((J+1) Mod 4))
Next J
' сохранение готовых координат
For J = 0 To 3
X(J) = XD(J)
Y(J) = YD(J)
Next J
Next I
Sleep
Как говорят: "простенько и со вкусом"!
2.3.4. Моделирование видимого спектра.
Захотелось сваять что-нибудь простенькое, в духе русской фразы "Каждый
Охотник Желает Знать, Где Сидит Фазан\Филин" или "Как Однажды Жак Звонарь
Городской\Головой Сломал Фонарь" или английской: "Richard Of York Gave Battle In
Vain" ("Ричард Йоркский дал сражение напрасно"). Казалось бы - нет проблем –
известно многое:
Видимое излучение — электромагнитные волны, воспринимаемые
человеческим глазом. Чувствительность человеческого глаза к электромагнитному
излучению зависит от длины волны (частоты) излучения, при этом максимум
чувствительности приходится на волну 555 нм (540 ТГц), в зелёной части спектра.
Поскольку при удалении от точки максимума чувствительность спадает до нуля
постепенно, указать точные границы спектрального диапазона видимого излучения
невозможно. Обычно в качестве коротковолновой границы принимают участок 380—
400 нм (790—750 ТГц), а в качестве длинноволновой — 760—780 нм (395—385 ТГц).
Электромагнитное излучение с такими длинами волн называется видимым светом, или
просто светом (в узком смысле этого слова)... Чистый воздух рассеивает синий свет
существенно сильнее, чем свет с большими длинами волн (в красную сторону спектра),
поэтому полуденное небо выглядит голубым.
34
Первые объяснения причин возникновения спектра видимого излучения
(дисперсии света) дали Исаак Ньютон в книге "Оптика" (1704) и Иоганн Гёте в
работе "К теории цвета" (1810). Однако ещё до них Роджер Бэкон наблюдал
оптический спектр в стакане с водой (1272) и даже отсидел в тюрьме некоторое время,
куда был отправлен по идеологическим мотивам "за астрологические заблуждения"...
Электромагнитный спектр — совокупность всех диапазонов частот
электромагнитных волн. В качестве спектральной характеристики электромагнитного
излучения используют следующие величины:
 Длину волны;
 Частоту колебаний;
 Энергию фотона.
Привычно заглянул в доступный источник знаний - "ВикипЕдию":
https://ru.wikipedia.org/wiki/Астрофизика
Астрофизика (от "звезда" + "природа") — наука, объединяющая астрономию и
физику, изучающая физические процессы в астрономических объектах, таких, как
звёзды, галактики и т.п. Оказалось, что основная часть данных в астрофизике
получается из наблюдений объектов в электромагнитных лучах. Исследуются как
прямые изображения, полученные на различных длинах волн, так и электромагнитные
спектры принимаемого излучения. Эту работу выполняет огромный раздел
Астрофизики - Наблюдательная астрофизика...
Общие сведения по Астрофизике можно найти, например, в книге Константина
Александровича Постнова и Анатолия Владимировича Засова [04], написанной на
основе курса лекций по общей астрофизике, читаемых авторами студентам
физического факультета МГУ им. М.В.Ломоносова. Предлагаемая книга несколько
шире по содержанию, чем традиционные курсы общей астрофизики. В ней делается
упор на объяснение основных физических процессов, происходящих в космических
объектах и средах. При этом факты, необходимые для понимания того или иного
явления, приводятся лишь в минимальном объеме.
Но это все "теория", а интересно, что говорят "практики", например, на
астрономическом портале в Астрофоруме:
http://www.astronomy.ru/forum/index.php/topic,63705.0.html
Участник разговора "Ath" в 2009 году начал собирать табличку с целью установления,
какими RGB-цветами обычно кодируются длины волн (Lamda)...
И уже в первых строках появляется фраза: "Опубликованные приближения получены с
учётом кривой чувствительности глаза CIE и определения цветового пространства
sRGB". Видимо, это требует пояснения.
Вот, посмотрите про "sRGB":
http://www.paninphotoschool.ru/articles/?art=30
Вторая часть цикла «Цветовой профиль изображения». Из данной статьи
читатели узнают, чем отличаются основные RGB-профили (sRGB, Adobe RGB и
ProPhoto RGB) и поймут, какой из них лучше использовать в том или ином случае.
35
Тем, кто еще не знает, что такое цветовое пространство и цветовой профиль и зачем
нужно уделять им внимание, рекомендуем начать чтение с первой статьи цикла:
Цветовой профиль изображения. Почему искажаются цвета.
Далее о стандарте "CIE":
Цветовое пространство CIE 1931 — CIE International Commission on
Illumination (Международная комиссия по освещению, сокращённо — МКО). Это
международный орган на свет, освещение, цвет, и цветовые пространства. Она была
создана в 1913 году в качестве преемника Commission Internationale de Photometrie и
сегодня базируется в Вене, Австрия. CIE 1931 это эталонная цветовая модель, заданная
в строгом математическом смысле и охватывает все видимые цвета и были приняты
монохроматические излучения с длинами волн 700; 546,1; 435,8 нм, а также
излучение стандартного источника D 50. CIE 1931 цветовых пространств впервые
определены количественные связи между:
a) физическими чистыми цветами (т.е. длины волн) электромагнитных
колебаний видимого спектра,
b) физиологическим восприятием цветов человека — цветное зрение.
Математические отношения, которые определяют эти цветовые пространства
являются важнейшими инструментами для управления цветом. Они позволяют
переводить различные физические реакции на видимое излучение в цвет чернил,
отображая их с подсветкой, имеются записывающие устройства, такие как
цифровые фотоаппараты, фиксирующие ответы общечеловеческого цветового
зрения.
В качестве иллюстрации стандарта можно привести таблицу (здесь) и рисунок
(см. следующий лист) цветового охвата:
Стандарт
Цветовой охват
Rec. 2020 (Ultra HD)
75,8% от пространства CIE 1931
Adobe RGB
52,1% от пространства CIE 1931
Rec. 709 (Full HD)
35,9% от пространства CIE 1931
sRGB
35,0% от пространства CIE 1931
http://www.astronomy.ru/forum/index.php/topic,63705.20.html
Проблема перевод длины волны Lamda в RGB поднималась на форумах
неоднократно. Иногда её топили во флейме, иногда она находила решение.
Вот то, что уже выложено в Сети:
- Статья Спектральный цвет и его реконструкция из RGB посвящена обратному
процессу реконструкции Lamda по RGB.
- Неплохое исследование RGB Colors as a Function of Wavelength, на основе которого
были написаны Java-программки для изображения спектров элементов, звёзд,
туманностей.
- Charles Poynton - Color technology, включая Color-FAQ.
- Программа Spectra на Дельфи, с исходным кодом функции WavelengthToRGB.
- Программа Spectra на Фортране и страничка Color Science, посвящённая функции
RGB(?), излучению нагретых тел (звёзды) и т.д.
- Wavelength 1.3. бесплатная программа для подобного преобразования.
- Формулы EasyRGB для перевода RGB/CMYK и т.д.
- Труды проф. Paul Bourke: Converting between RGB and CMY, YIQ, YUV и YCC colour
space and image compression.
- Статьи Rendering Spectra и What Color is it? с примером на Фортране (Andrew T.
Young), его спектр приведён во вложении.
36
Рисунок: Цветовое пространство CIE 1931
http://www.astronomy.ru/forum/index.php/topic,63705.40.html
Исправил названия цветов по Куликовскому (было по Википедии). Стало куда больше
походить на русский язык. Для справки привожу диапазоны здесь (вместе с RGB по
SPECTRA)...
Средние значения семи цветов радуги по SPECTRA получаются такие:..
Сохраняю здесь табличку, созданную с помощью устаревшего алгоритма SPECTRA —
на случай, если кто будет сталкиваться с такой кодировкой. Чтобы знать, откуда она.
Средние значения семи цветов радуги по Spectrend получаются такие...
37
При вычислении среднего красного и фиолетового я принял условные границы
видимого спектра 760нм и 370нм соответственно, т.к. Куликовский немного расширил
этот диапазон по сравнению с учебником Кононовича. Видимо, чтобы любители не
боялись ИК и ультрафиолета.
Примечание 2: Содержимое страниц форума приведено конспективно с большими
сокращениями. Всех интересующихся прошу использовать
приведенные ссылки.
Примечание 3: В обсуждении упомянут справочник [05] советского астронома Пётра
Григорьевича Куликовского (1910—2003). Его основные научные
работы относятся к звёздной астрономии (переменные, двойные,
сверхновые звёзды) и истории астрономии. По окончанию Мехмата
МГУ Куликовский стал научным сотрудником ГАИШ и проработал там
более полувека до выхода на пенсию. В справочнике излагаются задачи
и методы современной астрономии, дается описание небесных объектов
— звезд, планет, комет и др. Описываются методы астрономических
наблюдений, доступных скромным средствам любителей. Обширный
справочный материал полностью обновлен и отражает достижения
последних лет.
История астрономии знает немало примеров того,
как простой интерес к науке превращался в серьезное
увлечение, а любитель, приобретая необходимые знания
и навыки, становился профессионалом.
Задача "Справочника" — всемерно способствовать этому
процессу, а также расширять круг интересующихся
астрономией.
Куликовский П.Г.
В заключение обзора, приведу еще ссылку на широко известный у нас в стране и
за рубежом учебник по оптике Дмитрия Васильевича Сивухина [06], написанный на
основе лекций, которые читались автором в течение ряда лет студентам Московского
физико-технического института. Этот том общего курса физики посвящен физической
оптике и является естественным продолжением предыдущего тома, в котором
излагается учение об электрических и магнитных явлениях. Физическая оптика
рассматривается в нем преимущественно с волновой (конечно, электромагнитной)
точки зрения...
Осталось только представить текст программы на языке FreeBASIC, которая
работает, на мой взгляд, не совсем удовлетворительно, и потому убедительно прошу
заинтересованных специалистов доработать ее и сообщить результат для
публикации.
38
'
P R O G R A M "GR_Graph7"
'
08.03.2017
'------------------------------------------------------------'
Программа моделирования видимого спектра от длины волны
'------------------------------------------------------------' "Длина волны - RGB" от ультрафиолетового до инфракрасного...
'
#Lang "FB"
' режим совместимости с QBasic
'
' используется функция подгонки цветности
Declare Function Adjust(c As Double, f As Double) As UInteger
'
' общая область данных
Common Shared Gamma As Double
Common Shared IntensityMax As UInteger
'
' Основной модуль программы:
Dim As UInteger r, g, b
Dim As Double w, f, Red, Green, Blue
Gamma = 0.8: IntensityMax = 255
ScreenRes 640, 480, 16 ' 16-битный цвет
For w = 380 To 780 Step 2
Select Case Int(w)
Case 380 To 439
Red = (440 - w)/(440 - 380)
Green = 0
Blue = 1
Case 440 To 489
Red = 0
Green = (w - 440)/(490 - 440)
Blue = 1
Case 490 To 509
Red = 0
Green = 1
Blue = (510 - w)/(510 - 490)
Case 510 To 579
Red = (w - 510)/(580 - 510)
Green = 1
Blue = 0
Case 580 To 644
Red = 1
Green = (645 - w)/(645 - 580)
Blue = 0
Case 645 To 780
Red = 1
Green = 0
Blue = 0
Case Else
Red = 0
Green = 0
Blue = 0
End Select
39
' интенсивность исчезает вблизи границ видимости
Select Case INT(w)
Case 380 To 419
f = 0.3 + 0.7*(w - 380)/(420 - 380)
Case 420 To 700
f = 1
Case 701 To 780
f = 0.3 + 0.7*(780 - w)/(780 - 700)
Case Else
f = 0
End Select
'
r = Adjust(Red, f)
g = Adjust(Green, f)
b = Adjust(Blue, f)
'
Line( 0, 0)-(639,479),RGB(r, g, b), BF ' прямоугольник во
весь экран
Sleep 200
Next w
'
Print: Print " Press to complete!!!"
Sleep
'
Function Adjust(c As Double, f As Double) As UInteger
If c = 0 Then
Adjust = 0
Else
Adjust = IntensityMax*(c*f)^Gamma
EndIf
End Function
Тут еще пахать - не перепахать!
40
2.4. На память, на добрую память...
После долгих и кропотливых трудов, получить на экране "великолепную
картинку" и не сохранить ее себе на память и для отсылки знакомым – было бы
кощунственно... А главное, это совсем не трудно сделать!
Для этого FreeBASIC имеет встроенные операторы:

Оператор BSave сохраняет массив произвольных данных и информацию о
текущей палитре в файл на диске.

Оператор BLoad загружает произвольные данные из указанного файла,
созданного с помощью BSave или файла с изображением совместимым с BMP.
Примечание 4: BMP (BitMap Picture) — самый простой формат хранения растровых
изображений, разработанный компанией Microsoft. Файлы формата
BMP могут иметь расширения .bmp, .dib и .rle. С форматом BMP
работает огромное количество программ, т.к. его поддержка
интегрирована в операционные системы Windows.
2.4.1. Спрячем изображение в файл.
Синтаксис оператора BSave:
[result = ]BSave( filename, source [,[size][,[pal][, bitsperpixel]]] )
Параметры
filename - имя файла, создаваемого для хранения данных о пикселях и палитре.
source - адрес, по которому будут храниться данные или null (0) для хранения данных о
пикселях рабочей страницы текущего экрана.
size - полное количество байтов данных для хранения. Необязательный, значение
нужно только если файл не BMP.
pal - адрес буфера (необязательный), содержащего палитру из 256 цветов или null (0)
для палитры текущего экрана.
bitsperpixel - необязательный, запрашиваемая глубина битов для изображения файла
BMP.
result - ноль (0), если успешное обращение или ненулевой (код ошибки).
Если во втором параметре указать 0, то изображение будет взято с текущей
страницы экрана. Если во втором параметре указать адрес буфера, то рисунок будет
взят из буфера. Третий и четвертый параметры могут понадобиться тогда, когда
изображения рисуются не встроенными средствами FreeBASIC. В этом случае нужно
указать размер буфера, поскольку FreeBASIC не может определить его автоматически.
Ниже приведен текст программы, которая сохраняет в файле выведенный на
экран рисунок "Улетающий квадрат".
41
'
P R O G R A M "GR_Graph4S"
'
15.06.2014
'------------------------------------------------------------'
Простенькие графические программы на FreeBASIC
'------------------------------------------------------------' "Улетающий квадрат" - сохранение
'
#Lang "FB"
' режим совместимости с FreeBASIC
Dim As Integer X(3), Y(3), XD(3), YD(3)
Dim As Integer N, I, J, D, XL, YU
Dim As Double SMU, RMU
'
Screen 12 ' установить экран
D = 400
' длина стороны внешнего квадрата
XL = 120: YU = 40 ' координаты его левого верхнего угла
N = 32
' количество квадратов на рисунке
X(0) = XL: X(1) = XL+D: X(2) = XL+D: X(3) = XL
Y(0) = YU+D: Y(1) = YU+D: Y(2) = YU: Y(3) = YU
SMU = 0.08: RMU = 1 - SMU
' вывод всех N квадратов
For I = 1 To N
' вычисление координат вершин очередного квадрата
For J = 0 To 3
XD(J) = RMU*X(J) + SMU*X((J+1) mod 4)
YD(J) = RMU*Y(J) + SMU*Y((J+1) mod 4)
Next J
' вывод очередного квадрат
For J = 0 To 3
Line (X(J),Y(J))-(X((J+1) Mod 4),Y((J+1) Mod 4))
Next J
' сохранение готовых координат
For J = 0 To 3
X(J) = XD(J)
Y(J) = YD(J)
Next J
Next I
' сохранение графического экрана в файл
BSave("GR_Graph4.bmp",0)
'
Sleep
После выполнения программы, в каталоге, откуда была запущена программа,
обнаруживается файл точечного рисунка размером 301 КБ:
 ширина: 640 пикс или 22.58 см
 высота: 489 пикс или 16.93 см
 разрешение: 72 пикс/дюйм.
Полученный точечный рисунок приведен на следующем листе.
42
2.4.2. Достанем изображение из файла.
Синтаксис оператора BLoad:
result = BLoad( filename [, [dest] [, pal]] )
Параметры:
filename - имя файла для загрузки изображения (можно включить полный путь к
файлу).
dest - расположение области в памяти для загрузки изображения, или null (0) для
копирования изображения на текущую рабочую страницу графического экрана.
pal - ячейка памяти для загрузки палитры, или нуль (0), чтобы изменить текущую
палитру графического экрана, если он использует ее.
result - возвращает нуль (0) в случае успеха, или ненулевой код ошибки для выдачи
ошибки времени выполнения.
Ниже приведена бесхитростная программа, читающая указанный файл если он
обнаружен, или выдает сообщение, что файл не найден и выход. Если файл найден, он
выводится на экран и сбрасывается после нажатия клавиши. Создается область
загрузки, в которую читается файл и из которой после очередного нажатия клавиши
рисунок выводится на экран
43
'
P R O G R A M "GR_Graph4L"
'
15.06.2014
'------------------------------------------------------------'
Простенькие графические программы на FreeBASIC
'------------------------------------------------------------' "Улетающий квадрат" - загрузка
#Lang "FB"
' режим совместимости с FreeBASIC
Dim As Integer result
Screen 12
' установить экран
Cls
' загрузка и вывод изображения из файла на экран
result = BLoad("GR_Graph4.bmp")
If result <> 0 Then
Print " File not found !"
Else
'
Sleep 'ожидание нажатия клавиши
Cls
' создание области для загрузки
Dim As Any Ptr img = Imagecreate(640,480)
' загрузка изображения из файла в память
BLoad("GR_Graph4.bmp",img)
Sleep 'ожидание нажатия клавиши
' вывод изображения из памяти на экран
Put(0,0),img
EndIf
Sleep
Предварительная загрузка изображения в память создает некоторую свободу действий
– изображение в памяти перед выводом на экран может быть скорректировано.
Есть еще две интересные темы, которые не вошли в настоящую брошюру:
1. Оператор RGBA вычисляющий действительное значение цвета RGB в том числе
показатель Alpha (прозрачность) для полноцветных режимов. Показатель Alpha
используется в компьютерной графике для альфа-композитинга (Alpha compositing),
т.е. достижения эффекта частичной прозрачности и комбинированных изображений с
помощью сочетания And и Shr. Термин альфа-канал (Alpha channel) впервые введён в
оборот Алви Смитом в конце 1970-х и детально проработан в статье Томаса Портера и
Тома Даффа 1984 года.
2. Библиотека функций OpenGL (Open Graphics Library) производителей
оборудования на основе спецификации OpenGL. Включает более 300 функций для
рисования сложных двумерных и трёхмерных изображений. Реализация призвана
эффективно использовать возможности оборудования. FreeBASIC позволяет
практически напрямую работать с функциями OpenGL, для этого в дистрибутив
включены необходимые заголовочные файлы и библиотеки с OpenGL. Ниже приведен
каталог заголовочных файлов:
44
C:\Program Files\FreeBASIC\inc\GL
31.07.2012 20:14
714
31.07.2012 20:14
8 596
31.07.2012 20:14
22 136
31.07.2012 20:14
84 871
31.07.2012 20:14
734 003
31.07.2012 20:14
17 062
31.07.2012 20:14
15 374
31.07.2012 20:14
16 757
freeglut.bi
freeglut_ext.bi
freeglut_std.bi
gl.bi
glext.bi
glfw.bi
glu.bi
glut.bi
3. Список литературы.
[01] Дени Дидро. Собрание сочинений в 10 томах. Том 5. М.-Л.: Academia, 1936. 658 с.
[02] Боумен У. Графическое представление информации. М.: Мир, 1971. 228 с.
[03] Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики. СПб.:
БХВ-Петербург, 2003. 560 с.
[04] Засов А.В., Постнов К.А. Общая астрофизика. Фрязино, 2006. 496 с.
[05] Куликовский П.Г. Справочник любителя астрономии. М.: Эдиториал УРСС, 2002.
689c.
[06] Сивухин Д.В. Общий курс физики. В 5 т. Том IV. Оптика. М.: ФизМатЛит, 2005.
792 с.
Ведь и себя я не сберег
Для тихой жизни, для улыбок.
Так мало пройдено дорог,
Так много сделано ошибок.
Сергей Александрович Есенин (1895—1925)
Мне грустно на тебя смотреть... (1923)
Как всегда расстаюсь не без сожаления – отдельные темы этой главы требуют
обязательной доработки. Как любит говорить моя хорошая знакомая: небрежность в
подаче материала почти всегда возбуждает интерес к теме! Будем надеяться, что это
так (хотя знакомая имела ввиду совсем другой случай).
Но сегодня лимит времени и объема брошюры исчерпан!
На этом позвольте закруглиться.
До новых встреч!
Буду ждать, пишите: eugene_r@mail.ru
15 июня 2017 года
Документ
Категория
Информатика
Просмотров
102
Размер файла
1 324 Кб
Теги
свет, программа, экран, графика, freebasic, палитра, компьютер
1/--страниц
Пожаловаться на содержимое документа