linux — Графика на чистом c++?
Вопрос задан
Изменён 4 месяца назад
Просмотрен 1k раз
Когда пишется ОС припиливают API. С помощью Win32 API можно создавать оконные приложения. Но ведь когда у них не было никакого API они могли что-то нарисовать на экране, а затем собрать в кучу и делать оконные приложения. Как собственно средством только ЯП сделать окно, например или что-то нарисовать? Как это делали создатели ОС?
UPD. Нашёл интересный пост на данную тему здесь
- c++
- linux
- windows
- winapi
- графика
2
Можно рисовать на фреймбуфере(fbdev) или напрямую в видеокарту (dri).
Очень длинная статья по теме: http://betteros.org/tut/graphics1.php
В современных компютерах можно написать графику шейдерами и выводить на тот же фреймбуфер.
В противовес АПИ и фреймворкам, такой вывод популярен на встраиваемых системах и тонких клиентах.
Рекомендую посмотреть на Yocto. Там собирается очень минимальный Линукс и есть шаблоны для сборки разных библиотек для работы на низком уровне.
- писать в порты видеоадаптера
- BIOS обычно имеет прерывания для вывода точки на экране с заданными атрибутами.
Никакого окружения не нужно. Никакой ОС не нужно. API пишите сами. Удобнее сначала сделать компилятор к-нибудь языка. На ассемблере муторно.
ОС будет нужна для отрисовки более сложных вещей и работой с памятью. Хотя можно и без нее:)
Обратил внимание,что Вас интересует получение окошечек именно на С++. Но С++ все-равно должна использовать либо библиотеки написанные на асме, либо ассемблерные вставки для вывода. И мы приходим к п.
P.S. что есть ЯП? ЯПлакалъ?
1
Средством только ЯП не получится. Еще понадобится окружение, в котором ЯП будет работать. ОС по сути и есть это окружение. Без ОС — как минимум вам нужен будет загрузчик, который включит устройства ввода-вывода (клавиатура, мышь, видеокарта и дисплей), и устройство, с которого загрузится ваша программа — (дисковод, жесткий диск, CD-ROM, флэшка или сетевуха), найдет вашу программу на одном из устройств и передаст ей управление. После чего вы сможете рисовать, т.к. загрузчик, образно говоря, передаст вам вместе с управлением драйвер видеокарты в качестве модуля для вашей программы. Можете поставить себе виртуальную машину и поэкспериментировать с этим.
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Работа с графикой в Android
Понимание основ графики — важный этап развития Android-разработчика. В этой статье мы создадим простое изображение, используя возможности Android.
«Моя кошка прекрасно разбирается в программировании. Стоит мне объяснить проблему ей, как сразу становится все понятно». Эти замечательные слова написал разработчик John Robbins в далеком 2000-м году. Но раз мы начали говорить о кошках, пусть и в нашем простейшем графическом рисунке будет кошка.
Итак, приступаем. В первую очередь, надо создать новый проект. Назовем его, к примеру, SimplePaint. Далее создадим в нем новый класс Draw2D, который станет наследоваться от View. Как раз таки в этом классе мы и будем проводить наши графические опыты)). Щелкнув правой кнопкой мыши на имя пакета, выбираем в меню New | Java Class. Откроется диалоговое окно, где можно установить имя для класса Draw2D.
Следующий этап — добавление кода.
В данном коде мы выполняем наследовавние от класса android.view.View, переопределяя метод класса onDraw(Canvas canvas).
Теперь давайте загрузим созданный класс при старте программы. Нужно открыть основной файл активности MainActivity и поменять одну строчку после super.onCreate(savedInstanceState):
Здесь мы сообщаем системе, что загружать разметку в экран активности не надо. Вместо разметки мы загрузим собственный класс, у которого имеется свой холст для рисования.
Таким образом, подготовительные работы завершены и можно переходить к графике. Весь последующий код станем писать в классе Draw2D. Но для начала сделаем незначительное лирическое отступление.
Для графики применяется холст Canvas, то есть речь идет о некой графической поверхности, предназначенной для рисования. Однако прежде чем что-либо рисовать, следует определить нужные нам параметры: цвет, толщину, фигуру. Вся работа с графикой осуществляется в методе onDraw() класса Draw2D.
Что же, теперь нужно создать в классе виртуальную кисть. В методе необходимо указать, что вся поверхность будет закрашиваться белым цветом:
Холст готов. Теперь можно приступать к непосредственному рисованию. Перед каждым порывом вдохновения мы задаем свои настройки, а также вызываем нужный нам метод. Допустим, для создания желтого круга включаем режим сглаживания, устанавливаем соответствующий цвет, вызываем метод drawCircle() с необходимыми координатами, а потом выполняем заливку окружности желтым цветом.
Не забывайте соблюдать очередность рисования. Если вы поместите данный код до того, как зальете холст белым цветом, то «солнышка» вам не видать. Это то же самое, если вы сначала нанесете на стену рисунок, а потом заклеите эту же стену обоями.
Для рисования зеленого прямоугольника следует задать координаты и цвет — это будет лужайка.
Теперь нужен текст поверх лужайки. Для этого устанавливаем синий цвет, определяем стиль заливки и режим сглаживания, а также размер прямоугольника, в который и будет помещен текст.
Кстати, если очень хочется, можно вывести текст и под углом. Давайте сделаем это в виде строки-лучика солнца.
Композицию можно завершить выводом рисунка из ресурсов.
Для упрощения примера размеры и координаты фигур подбирались для экрана вручную. Но когда мы говорим о реальных приложениях, надо сначала вычислить размеры пользовательского экрана, после чего выводить фигуры с учетом полученных результатов. В обратном случае можно столкнуться с тем, что ряд элементов нашей композиции просто не попадут на экран в случае вращения гаджета.
В финале получим простейший рисунок. Если хотите, можете его доработать на свое усмотрение.
Осталось выложить исходный код класса:
По материалам статьи Александра Климова «Работаем с графикой. Основы».
Графические решаемые программы на языке C — Программирование на языке C
Графические решаемые программы на языке C —> C — это мощный язык программирования общего назначения. Он быстрый, портативный и доступен на всех платформах. Если вы новичок в программировании, C — хороший выбор для начала вашего пути программирования.
Эта страница содержит решенные программы/примеры с решениями на языке C Graphics, здесь мы приводим наиболее важные программы по каждой теме. Каждый пример программы включает описание программы, код C, а также вывод программы.
Вот список решенных программ/примеров C-Graphic с решениями и подробным объяснением. Все примеры скомпилированы и протестированы в системе Windows.
Решаемые графические программы C |
---|
C Программа для выполнения движения рыбы в графике |
Программа C для выполнения Pendulum в графике |
C Программа для выполнения движения автомобиля с использованием графики |
C Программа для игры в шахматы с использованием графики |
Программа C для выполнения прыгающего мяча с использованием графики |
Программа C для выполнения Moving Wheel с использованием графики |
Программа C для рисования эллипса с использованием графики |
Программа C для рисования линии с использованием графики |
Программа на C для рисования линии с использованием алгоритма рисования линии Брезенхэма |
Программа на C для рисования круга с использованием алгоритма средней точки |
Программа на C для рисования круга с использованием алгоритма круга Брезенхэма |
Программа C для выполнения 2D-преобразований в трансляциях |
Программа C для выполнения 2D-преобразований с использованием масштабирования |
Программа C для выполнения 2D-преобразований при вращении |
Программа C для показа тикающих часов с использованием графики |
Программа C для скрытия указателя мыши с помощью графики |
Программа C для рисования катушки индуктивности с использованием графики |
Программа C для рисования сопротивления с использованием графики |
Программа C для рисования транзистора PNP с использованием графики |
Программа C для рисования Eclipse с использованием графики |
Программа C для рисования транзистора NPN с использованием графики |
Программа C для рисования конденсатора с использованием графики |
Программа C для рисования треугольника с использованием графики |
Программа C для проверки наличия или отсутствия поддержки мыши в графике |
C Программа для создания дома и выполнения операций в Графике |
Программа C для рисования прямоугольника и выполнения операций с графикой |
Программа C для реализации алгоритма рисования круга в средней точке в графике |
Программа C для реализации движущегося автомобиля в графике |
Программа C для реализации вращения колеса в графике |
Программа C для реализации спиральной модели в графике |
Программа C для реализации гистограммы в графике |
C Программа для запуска воздушного змея в графике |
Графическая программа C для аналоговых часов в Graphics |
Программа C для реализации трехмерного вращения в графике |
Если вы обнаружили какую-либо ошибку или какие-либо вопросы, связанные с вышеуказанными программами, или какие-либо вопросы или отзывы, которые вы хотите задать нам, вы можете Связаться с нами через нашу контактную страницу или вы также можете прокомментировать ниже в раздел комментариев. Мы постараемся связаться с вами в ближайшее время.
Спасибо, что прочитали пост….
5 1 voice
Рейтинг статьи
Добавление для: Графического программирования с использованием C/C++ в Ubuntu 20.4 | by Ajit kumar
Я изучаю графическое программирование давным-давно, когда я был пользователем Windows (в те дни и даже сейчас студенты в Индии начинают с Windows), поэтому программирование на языке C я изучал с помощью компилятора Turbo C. Со временем я перешел на Linux (Ubuntu и Fedora) и начал использовать GCC для C и G++ для C++, но у меня не было возможности работать с графическим программированием (я имею в виду алгоритмы рисования линий и кругов из учебника).
Недавно один из моих предыдущих студентов спросил меня, как запускать графические программы в Ubuntu (потому что я с самого начала запихивал их в Ubuntu, т.е. с 1-го семестра 🙂 , хотя позже после меня все откатилось на Windows). Для меня это тоже было ново, поэтому я решил изучить это. Я попросил его программу и обнаружил, что он пытается запустить программу, написанную для Windows-машины (по-прежнему много примеров в Интернете для Windows) на своей Ubuntu-машине. Итак, я решил настроить среду на своей Ubuntu и протестировать эти программы с модификацией. Но оказывается из-за смены версии ОС и модулей настройка не такая прямая. Есть учебники по установке и настройке, но многие из них либо устарели, либо не работали. Итак, я постарался решить все вопросы и собрать информацию в одном месте, этот пост основан на этой коллекции. Итак, в основном это собрано из различных переполненных ссылок и интернет-учебников. (Мой вклад заключается в том, чтобы заставить его работать на моем компьютере с Ubuntu 20.4 для GCC 9..3.0 версия). Обязательно проверьте версию в вашей системе ($gcc — версия)
Для графического программирования с использованием C в ОС Linux (Ubuntu) нам необходимо установить библиотеку
Ниже приводится сводка различных советов и приемов, доступных в Интернете, для подготовки рабочей среды.
Многие из них устарели, поэтому их нельзя применить, так как их нужно немного изменить.
Источник: https://www.geeksforgeeks.org/add-graphics-h-c-library-gcc-compiler-linux/
Это один из хороших источников для установки библиотеки graphics.h, но пока я пытался использовать Ubnunt 20.4, она не работала как есть (из-за обновления/изменения нескольких зависимостей). Итак, в основном нужно установить libgraph на Ubuntu чтобы заставить Graphics.h работать: «Если вы хотите использовать Graphics.h на платформе Ubuntu, вам нужно скомпилировать и установить libgraph. Это реализация графического API turbo c в Linux с использованием SDL».
Источник libgraph: http://download.savannah.gnu.org/releases/libgraph/libgraph-1.0.2.tar.gz
Можно выполнить шаги по приведенной ниже ссылке с предложенными ниже изменениями. Чтобы упростить процесс, я скопировал шаги оттуда и представил здесь с необходимыми изменениями.
Источник: https://www.geeksforgeeks.org/add-graphics-h-c-library-gcc-compiler-linux/
Шаг 1: Сначала установите build-essential, набрав
$sudo apt install build-essential
Шаг 2: Установите несколько дополнительных пакетов , набрав (в этом libesd0-dev устарел, начиная с Ubuntu 18.04, поэтому запуск команды напрямую нарушит установку, поэтому запустите приведенную ниже команду вместо оригинальной команды, указанной в ссылке Geeksforgeeks. )
Сообщение об ошибке: Не удалось найти пакет libesd0-dev
$sudo apt-get install libsdl-image1.2 libsdl-image1.2-dev guile-2.0 \
guile-2.0-dev libsdl1.2debian libart-2.0 -dev libaudiofile-dev \
libdirectfb-dev libdirectfb-extra libfreetype6-dev \
libxext-dev x11proto-xext-dev libfreetype6 libaa1 libaa1-dev \
libslang2-dev libasound2 libasound2-dev
Установка шага 1:
libesd0-dev
Источник: https://askubuntu. com/questions/1082722/unable-to-locate-package-libesd0-dev-on-ubuntu-18-04
Для этого вам нужно добавить репозиторий xenial, то есть репозиторий предыдущей версии Ubuntu, которая все еще поддерживается, в sources.list
Примечание: nano и gedit — это просто текстовые редакторы, вы можете использовать любой текстовый редактор по вашему выбору.
Шаг 2.1.1: откройте sources.list с помощью команды sudo
$sudo nano /etc/apt/sources.list
или
$sudo gedit /etc/apt/sources.list
Шаг 2.1.05 2: вставьте исходный код модуля в открытый файл и сохраните . (Строки ниже не являются командой, но вам просто нужно вставить ее в открытый файл.
deb http://us.archive.ubuntu.com/ubuntu/ xenial main Universe
deb-src http://us.archive. ubuntu.com/ubuntu/ xenial main Universe
Шаг 2.1.3 Установите libesd0-dev
$sudo apt update && sudo apt install libesd0-dev
ШАГ 3: Теперь извлеките загруженный файл libgraph-1. 0.2. tar.gz
ШАГ 4: Перейдите в извлеченную папку и выполните следующую команду (используйте компакт-диск из терминала, чтобы перейти к распакованному файлу, или используйте открытый терминал из открытой папки.)
Здесь запуск make after ./configure выдаст ошибку о guile-libgraph.c, поэтому вам нужно настроить путь.
Ошибка: guile-libgraph.c:25:10: фатальная ошибка: libguile.h: Нет такого файла или каталога
Источник: https://askubuntu.com/questions/942863/trying-to-install-libgraph
4.1 Установите или проверьте наличие установки guile-2.0-dev
$sudo apt install guile-2.0-dev
4.2 настроить путь модуля в сценарии конфигурации.
$CPPFLAGS=»$CPPFLAGS $(pkg-config — cflags-only-I guile-2.0)» \
CFLAGS=»$CFLAGS $(pkg-config — cflags-only-other guile-2.0)» \
LDFLAGS=”$LDFLAGS $(pkg-config — libs guile-2.0)” \
./configure
4. 3 Запуск команды make после успешного выполнения предыдущей команды
$make
//если результат выполнен успешно, переходим к следующему шаг еще попробуйте отладить это в первую очередь.
4.4 после настройки всех требований к установке теперь установите модуль
$sudo make install
4.5 Теперь скопируйте исходный код в папку lib
$sudo cp /usr/local/lib/libgraph.* /usr /lib
Это сделает среду готовой к работе с файлом graphics.h, но если вы хотите запустить код, например, приведенный ниже код, вы получите ошибку типа:
неопределенная ссылка на `initgraph’ Ubuntu 20.4 и для всех называемая функция.
Это связано с некоторой проблемой пути, поэтому вы можете пройти через нее, просто передав некоторый аргумент (-lgraph) при компиляции исходного кода. То же самое применимо как для C/C++. см. следующий шаг для компиляции и выполнения программы.
Примечание:
1. Многие примеры кода в Интернете предназначены для компилятора TurboC на базе Windows, поэтому он не будет работать в среде Linux.