Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 24.12.2016
Сообщений: 35
1

Как получить доступ к работе с графикой в Linux, не прибегая к использованию сторонних библиотек?

04.08.2017, 22:54. Показов 4252. Ответов 15

Author24 — интернет-сервис помощи студентам
Друзья!
Подскажите, можно ли как-то получить доступ к работе с графикой в Linux, не прибегая к использованию сторонних библиотек? Может есть, скажем, какие-нибудь специальные системные вызовы для осуществления подобных целей? Конечно, я понимаю, что это сроду изобретению велосипеда, но тем не менее хочется поглубже познать все азы и тонкости разработки графических библиотек.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2017, 22:54
Ответы с готовыми решениями:

Возможно ли определять цвет пикселя PictureBox, не прибегая к использованию Bitmap
Возможно ли определять цвет пикселя, не прибегая к использованию Bitmap? Я так понял, что на нем...

Как убрать следы от библиотек сторонних производителей
Проблема стоит в следующем. Писал приложение для работы с БД MySQL. Долго не мог подключиться к БД...

Как узнать частоту звука без сторонних библиотек
кто нибудь знает как в работать со звуком без сторонних библиотек? мне нужно чтобы во время...

Как отловить нажатие клавиш-стрелок без сторонних библиотек?
Всем привет! Подскажите, пожалуйста, как ловить нажатие клавиш-стрелок? Без использования...

15
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,262
Записей в блоге: 7
04.08.2017, 23:49 2
theonewhoknocks, в *NIX графика не является встроенной в ядро операционной системы(не считая драйверов) и в отличии от Windows системных вызовов не предусмотрено.
Вся графика реализуется сторонним приложением, запущенным как сервис(daemon)
На данный момент этим приложением являются различные реализации X Window System.
В поставку входит библиотека взаимодействия(xlib) и все графические приложения основаны на ее использовании.
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
04.08.2017, 23:52 3
По сути дела ты хочешь сам написать графическую библиотеку или чего? В этом смысле скачай исходники SDL, посмотри, как оно устроено изнутри. Там в общем-то выдаётся доступ к памяти, отмапированной на кусок экрана (или которая будет отмапирована на кусок экрана). А дальше уже что хочешь туда загоняй. Если нужно опуститься ещё ниже, то нужно смотреть в исходники иксов, там уже идёт работа непосредственно с видеопамятью, можно посмотреть, как туда выдаётся доступ
2
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
04.08.2017, 23:59 4
У меня даже какой-то пример остался. Если сумеешь в нём разобраться
Вложения
Тип файла: rar sm718bars.rar (1.3 Кб, 19 просмотров)
2
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
12.09.2017, 19:41 5
Если хочется просто разобраться с графикой без привязки к какой-то конкретной платформе, я бы посоветовал начать с примитивных графических режимов DOS (что-то вроде 640х480х16 или более удобный 320х200х256). Я в таком режиме когда-то писал простенький механизм отображения 3D объектов с отсечением по глубине.
Современные же операционные системы низкоуровневого доступа к графике не дают, так что искать обходные пути просто нет смысла - воспользоваться этими хаками будет еще сложнее.
Если хочется писать прикладные программы, лучше использовать стандартные библиотеки - например, низкоуровневую X11 или кроссплатформенную QT. Это даст практический опыт.
Если же хочется посмотреть реальное устройство графической системы начиная от драйверов до получения данных от сторонних приложений, и при этом не боитесь трудностей - можно посмотреть сырцы того же X11 или Wayland. Правда, отсутствие альтернатив подсказывает что дело это КРАЙНЕ сложное. Впрочем, ничего невозможного нет.
Еще один момент: можно взять относительно высокоуровневую библиотеку вроде SDL и написать собственную реализацию "оконной системы" для каких-нибудь внутренних целей - ну хотя бы менюшек в играх. Чем-то это схоже с первым вариантом (про DOS который), но более полезно практически.
1
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
14.09.2017, 00:20 6
Цитата Сообщение от theonewhoknocks Посмотреть сообщение
Друзья!
Подскажите, можно ли как-то получить доступ к работе с графикой в Linux, не прибегая к использованию сторонних библиотек? Может есть, скажем, какие-нибудь специальные системные вызовы для осуществления подобных целей? Конечно, я понимаю, что это сроду изобретению велосипеда, но тем не менее хочется поглубже познать все азы и тонкости разработки графических библиотек.
theonewhoknocks, системных вызовов, реализующих графику и работу с ней в Linux, как и в любой другой Unix-системе, нет просто потому, что ядро Unix или Linux не реализует графики и работы в графическом режиме. Вся графика в Unix-подобных системах вынесена в отдельный пользовательский процесс, называющийся X Server и представляющий собой обычную программу с пользовательским уровнем привилегий, запущенную в системе. X Server и организуемая им оконная графическая система, называемая X Window System, с очень давних пор и до наших дней является фактическим стандартом графики в Unix-подобных системах. Существует ещё оконный сервер Wayland, альтернатива X Window System, появившаяся совсем недавно, по принципу работы и функциональности совсем не похожая на X Server, но он очень мало где используется.

Сама система X Window очень старая, обросшая, если верить источникам и сайту сообщества, её разрабатывающего, кучей наслоений, плохо сочетающихся друг с другом, внутренне очень сложная (это касается в первую очередь устройства программы X Server'а как такового). В общем, старая разваливающаяся колымага. Гниль и труха, одним словом. Но она до сих пор работает и развивается, ничего нового взамен ей, признанного в Unix-мире, так и нет.

Добавлено через 26 минут
А то что ты ищешь, базовый основной графический интерфейс системы Unix и Linux, это, скорее всего, библиотека Xlib. Это основная графическая библиотека, прилагающаяся к X Server'у, через вызовы функций которой прикладные программы взаимодействуют с X Server'ом. Она содержит все функции по созданию окон и управлению ими (открытие, закрытие, изменение размера окна), обработке событий от мыши и клавиатуры, рисованию графических примитивов, выводу текста выбранным шрифтом, созданию графического контекста и его изменению (графический контекст — это структура, содержащая такие сведения, как толщина создаваемых линий, цвет объектов и т. д.). Т. е. это библиотека по своим функциям и возможностям аналогичная Win32 API и делающая примерно те же вещи.

Иксы работают с прикладными программами по следующему принципу. X Server имеет открытый сокет для приёма данных от программ (своих клиентов). Прежде чем начать работать с ним и рисовать графику, программа устанавливает соединение с этим сокетом через свой открытый сокет (в этом заключается инициализация ею графического режима). Дальше, установив соединение с X Server'ом, она начинает отправлять через этот сокет команды-запросы X Server'у и, возможно, получать от него ответы на эти запросы. Команды программой отправляются в потоковом режиме, как какие-то символьные сообщения, и ответы от X Server'а ею получаются в таком же виде, как символьные сообщения. Формат этих сообщений образует некоторый низкоуровневый язык обмена сообщениями между программой и X Server'ом, этот язык называется X Protocol. Можно, конечно, взаимодействовать с X Server'ом через X Protocol напрямую, установив через сетевые системные вызовы Unix связь программы с Х Server'ом, а потом формируя в программе поток сообщений на X Protocol. Но это сложно и очень неудобно, поэтому для этой цели придумана библиотека Xlib, представляющая собой надстройку и обёртку над X Protocol, и реализующая всю базовую функциональность X Server'а, все его действия. Каждый вызов функции Xlib приводит к формированию одного или нескольких сообщений на X Protocol и отправке их по сокету X Server'у. Сам X Server умеет понимать и интерпретировать сообщения непосредственно на X Protocol. На этом же протоколе он отправляет ответы программе-клиенту, а функция библиотеки Xlib, вызванная в программе-клиенте, их интерпретирует и возвращает результат, который может использовать дальше клиентская программа.

Добавлено через 21 минуту
Непосредственно на Xlib сейчас очень редко пишут программы (если пишут вообще), но это вполне возможно. Там с самого начала была создана библиотека, позволяющая строить виджеты и обработчики событий, называлась она X Toolkit, и на основе этой библиотеки были созданы ранние библиотеки виджетов (OSF/Motif, Openlook и т. д.), т. е. даже тогда в прикладных программах предполагалось использовать виджетные библиотеки (организованные путём примитивного ООП на чистом C), а Xlib отводилась роль низкоуровневой библиотеки, средствами которой можно построить эти виджеты и заставить их работать.

Тем не менее, можно писать оконные программы и на чистой Xlib. Программирование тогда по сути будет очень похоже на работу с Win32 API, да и структура иксовой программы для Unix/Linux будет здорово напоминать устройство программы для Windows, написанной с использованием Win32 API в чистом виде без привлечения более высокоуровневых средств от Microsoft.

Добавлено через 33 минуты
Правда, литературы по этой теме на русском языке почти нет.

Есть старенькая очень паршивенькая книжка "Доценко А. В., Исаков А. Б, Рябов А. Ю. Unix, X Window, Motif. Основы программирования". Издательство "Москва. АО Аналитик", выпущена в 1995 г. Изложено всё поверхностно, бегло, кое-как, освоить по ней Xlib очень сложно. Правда, и она теперь является, можно сказать, библиографической редкостью. Но при отсутствии более приличной литературы на русском языке и по ней что-то понять и разобраться с иксами можно. В сети можно найти сканы этой книги. Сама книга представляет собой двухтомник: I том — это учебник по азам программирования в Unix, библиотеке Xlib и её надстройкам X Toolkit и Motif. II том — это справочник по функциям, структурам и типам Xlib, X Toolkit и Motif (т. е. по сути всё то же , что в первом томе, но в виде справочника с перечислением гораздо большего количества функций и других объектов библиотеки, чем в I томе).


Есть электронный учебник по Xlib на сайте ПетрГУ
http://dfe.petrsu.ru/koi/posob/X/index.html

Этот электронный учебник по сути дела не что иное, как переписанные и слегка переделанные главы (и то не все) из книжки, о которой я писал выше. Т. е. хорошим качественным материалом по Xlib он тоже не является, но посмотреть объяснения, примеры программ там можно.


Ну и ещё есть такой материал
http://www.asvcorp.ru/tech/lin... index.html

Это попытка неким автором написать книжку по иксам и издать её. Ни одно издательство книга не заинтересовала (видимо они нашли, что книга по такой теме будет очень плохо продаваться, а может, им не понравился сам текст, кто его знает, чем они руководствовались), книга так и осталась неоконченной, и автор выложил её на свой персональный сайт. По сути дела то, что опубликовано на сайте, представляет собой набросок, черновик книги. Написана, как мне показалось, очень маленькая часть книги, охвачен очень небольшой объём вопроса. Тем не менее, в книге есть справочник по основным функциям Xlib, возможно, это просто перевод man'ов по этим функциям справочной системы иксов, сделанный автором неоконченной книги. Сказать что-то о качестве этого наброска книги не могу — не читал его.

Добавлено через 2 минуты
Больше никакой литературы по программированию в иксах на русском языке не знаю.

Добавлено через 25 минут
Правда, если поискать всякие статейки в рунете и посмотреть разные книжки, посвящённые программированию в Linux, можно найти маленькие описания Xlib с крошечными иллюстративными примерами, которые могут дать начальное представление о программировании иксов. Например, такое описание с крошечным иллюстративным примером есть в книжке О. Цилюрика "Разработка программных проектов в Linux (инструменты и технология)". Там оно дано в главе "Создание графических приложений", см. стр. 138 – 144. В этой главе помимо примера на Xlib есть пример точно такого же демонстрационного окна на GTK+, QT, wxWidgets и GLUT. Примеры, конечно, смешные и каждому посвящено не больше страницы текста, но хотя бы понять, что это такое, в общих чертах можно.

Добавлено через 12 минут
Вот ссылка на страницу с описанием этой книжки:
http://mylinuxprog.blogspot.ru/2014/05/linux.html

Ссылка для скачивания самой книги: https://yadi.sk/i/O5PrqktNZQwvB
И примеров из неё: https://yadi.sk/d/QKWwZtkGZQxEZ
1
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
14.09.2017, 01:10 7
А вот на английском языке книг по программированию иксов и использованию библиотеки Xlib довольно много. Правда, в основном это всё старые книжки, изданные в конце 1980-ых — начале 1990-ых годов O'Reilly и другими американскими издательствами, но информации в них, похоже, немало.

Вот какую литературу рекомендует для новичков FAQ по иксам:

FAQ - What books and articles on X are good for beginners.docx


И из всей этой литературы я отобрал книжки, посвящённые программированию собственно с использованием библиотеки Xlib:

Books on Xlib.docx

Большую часть этих книжек можно найти в Интернете. Часть из них в виде электронных книг, часть в виде сканов. При этом некоторые книги в сети доступны вполне легально (в частности, издательство O'Reilly многие свои старые книги выложило в виде электронных книг и сканов в открытый доступ), а некоторые в виде пиратских копий-сканов.

К тому же в англоязычной сети есть несколько очень неплохих сайтов, посвящённых низкоуровневому программированию в иксах с помощью Xlib, написанных, похоже, довольно профессиональными авторами, хорошо знающими эту систему.
1
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
14.09.2017, 01:47 8
И конечно же, смотреть официальную документацию по системе X Window, её на сайте x.org очень много и она там представлена в разных видах:
https://www.x.org/wiki/

А моё поверхностное впечатление об этой библиотеке такое.

Она несколько громоздка и содержат очень большое количество настраиваемых параметров, которые передаются функциям в виде структур. Сами функции весьма тяжеловесны, но пользоваться ими можно вполне. Библиотека имеет некоторые выраженные объектно-ориентированные черты, хотя написана она на чистом C и использует синтаксис чистого C. В целом, она представляет структурный стиль программирования, но с некоторыми чертами ООП, которые чувствуются в ней.

Тем не менее, если GTK+, QT, wxWidgets — это кроссплатформенные надстройки и обёртки над низкоуровневыми графическими библиотеками операционных систем (в частности, над Xlib и Win32 API), то Xlib — это родная графическая библиотека Unix. Она, в отличие от тех же GTK+ и QT, не является переносимой, хотя существуют реализации X Server'а вместе с X Protocol'ом и собственной Xlib для системы Windows (самая известная из них — это X Server в составе Cygwin).

Наверняка, описывая эту систему, я допустил кучу неточностей и ошибок, т. к. представляю её себе плохо. Пусть другие форумчане меня поправят, если найдут их. Например, Evg даже писал на ней какие-то программы и знает её, вероятно, неплохо. Мне же ничего на ней написать не приходилось. Так что поправки и уточнения будут интересны.

Добавлено через 10 минут
И конечно, можно сделать графику всякими нестандартными способами. Например, реализовать вывод рисунков в консоль или вообще организовать взаимодействие с видеокартой на нижнем аппаратном уровне. Но это уже будут неканонические для Unix способы реализации графики, к тому же они будут, скорее всего, непереносимы даже между различными системами семейства Unix (т. е. то что будет работать, допустим, в Linux, не запустится во FreeBSD или Solaris).
0
Evg
14.09.2017, 09:54
  #9

Не по теме:

Цитата Сообщение от JohnyWalker Посмотреть сообщение
Evg даже писал на ней какие-то программы
Откуда такая инфа?

0
JohnyWalker
15.09.2017, 01:41
  #10

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Откуда такая инфа?
Ошибся, решил, прочитав твой пост №4, что там https://www.cyberforum.ru/atta... 1501880346 у тебя программа на Xlib. Когда программу скачал и посмотрел, понял, что к иксам она никакого отношения не имеет, что это графика, устроенная на низком уровне, скорее всего, путём отображения массива с изображением экрана, находящегося в памяти процесса, в адреса видеоустройства. Т. е. я подумал, что это графика, построенная путём прямого доступа к памяти, не зря там есть системный вызов mmap(). Но может, я ошибся и неправильно понял, что она делает, я специально в твоей программе не разбирался. Кстати, скажи, для какого компьютера и какого графического устройства она у тебя написана? Для обычной видеокарты персоналки или для чего-то более специфического? А потом, может, у тебя были и какие-то опыты с Xlib? Если да, то скажи.

0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
15.09.2017, 09:28 11

Не по теме:

Эта программа пишет в видеопамять напрямую. Я её назвал словом "пример", потому что писал её не я. Я сейчас даже не могу с ходу вспомнить откуда я этот пример откопал и подо что это вообще изначально было



Добавлено через 2 минуты

Не по теме:

Погуглил по имени файла (sm718), выдало, что это Silicon Motion 718 - какая-то нановидеокарта. Вероятно, под неё нет драйверов под линукс, поэтому кто-то с ней изголялся, работая ручками вместо драйвера

Название "/dev/fb0" происходит, вероятно, от frame buffer

0
590 / 413 / 135
Регистрация: 02.10.2008
Сообщений: 1,745
Записей в блоге: 1
16.09.2017, 20:13 12
Не понял, а чем framebuffer не устраивает?
Запилен в ядро, сторонних либ не использует.

Работает конечно только в консоли, т.к. стоит запустить графику, вида xorg/wayland придётся подчиняться их правилам - самый нижний уровень это XLib.

Работает это просто - наваял за полчаса гугеля:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <linux/fb.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/mman.h>
 
int main(void)
{   int             fb_desc;
    struct          fb_fix_screeninfo scrInfoFix;
    struct          fb_var_screeninfo scrInfoVar;
    unsigned char*  buff;
    size_t          lenbuff,x,y;
    /*Open framebuffer device*/
    if((fb_desc=open("/dev/fb0",O_RDWR))<0)
    {
        perror("Cant open framebuffer device-file: ");
        return -1;
    }
    
    /*Get info about current screen*/
    if(ioctl(fb_desc, FBIOGET_FSCREENINFO, &scrInfoFix)<0)
    {/*Fixed info*/
        perror("Hm... ioctl() failed ???: ");
        close(fb_desc);
        return -1;
    }
    
    if(ioctl(fb_desc, FBIOGET_VSCREENINFO, &scrInfoVar)<0)
    {/*Variable info*/
        perror("Hm... ioctl() failed ???: ");
        close(fb_desc);
        return -1;
    }
    
    
    printf("Current framebuffer is a:");
    switch(scrInfoFix.type)
    {
        case FB_TYPE_PACKED_PIXELS: 
                puts("\t"Packed pixels." - remember the PCX-format");
                break;
        case FB_TYPE_PLANES:    
                puts("\t"Non interleaved planes" - I like it ;)");
                break;
        case FB_TYPE_INTERLEAVED_PLANES:    
                puts("\t"Interleaved planes" what is?");
                break;
        case FB_TYPE_TEXT:  
                puts("\t"Pure text terminal" - very good, atributes & symbols");
                break;
        case FB_TYPE_VGA_PLANES:    
                puts("\t"EGA\\VGA screen" - what is?");
                break;
        case FB_TYPE_FOURCC:    
                puts("\t"V4L2 FOURCC" - damn...");
                break;
        default:
                printf("\tI don`t know this screen type: %d",scrInfoFix.type);
                
    }
    /*length of frame buffer*/
    lenbuff = scrInfoFix.line_length * scrInfoVar.yres;
    
    /*map buffer in to me*/
    buff = (unsigned char *)mmap(NULL, lenbuff, PROT_READ|PROT_WRITE,  MAP_SHARED, fb_desc,0);
    
    if(buff == NULL)
        {
            perror("mmap() failed:");
            close(fb_desc);
            return -1;
        }
    
    /*Only now we can draw in the buffer*/
    
    for (y=100; y < 200; y++)
        {
         for (x=200; x<456; x++)
          buff[y*scrInfoFix.line_length + x] = (unsigned char)((x-200)&0xFF);
           }
    
    
    /*free all resources*/
    munmap(buff,lenbuff);
    close(fb_desc);
    return 0;
}
Во вложении результат: (scrot не сработал - легче сфоткать было)
Миниатюры
Как получить доступ к работе с графикой в Linux, не прибегая к использованию сторонних библиотек?  
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
16.09.2017, 22:50 13
Цитата Сообщение от drfaust Посмотреть сообщение
Работает конечно только в консоли
Да, действительно. Я забыл об этой особенности. Тогда нормальным людям это точно не подойдёт
0
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
08.10.2017, 14:41 14
Вопрос составлен как-то странно. Что в данном случае понимается под графикой?

Одна единственная буква на беспросветно-черном фоне - это тоже графика.

Иными словами на си и в обычном tty можно какой-нибудь рей-кастинговый движок написать, работать правда будет очень посредственно. Ну и разрешение экрана... если принять за точку символ * и выводить его разными цветами... в общем сами понимаете что это за "графика".

В принципе с использованием ncurses можно получить даже что-то относительно вменяемое. Правда опять же скорость вывода на экран?

Если речь идет об окошках и кнопках а-ля "как в windows", то в этом случае только через иксы (x.org/wayland) с помощью gtk/qt. Если трехмерная графика, то OpenGL/Mesa, если графика + управление, то SDL + OpenGL.

Во всех остальных случаях, ассемблер в зубы, исчерпывающую документацию по дровам ну и вызовы UNIX, и ваяй хоть крайзисы... лет эдак через 5 может даже титульный экран напишешь.

Таким образом, если под линуксом нужна относительно быстрая 2D-графика, т.е. линии/точки/кружочки/текст и без дополнительных библиотек, то пишем на яве:

Window.java
------------------
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.awt.*;
import javax.swing.*;
 
public class Window
{
    public static void main(String[] args)
    {
        JFrame wind = new JFrame("Окно с изображением");   // заголовок окна
        wind.setSize(400, 400);                                     // размер окна
        wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        wind.setLayout(new BorderLayout(1, 1));
        wind.setResizable(false);       // запрещаем менять размер
        Canvas canv = new Canvas();
        wind.add(canv);
        wind.setVisible(true);
    }
}
Canvas.java
------------------
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.awt.*;
import javax.swing.*;
 
class Canvas extends JComponent
{
    public void paintComponent(Graphics g)
    {
        /* **********************************
         * размер окна:
         * по вертикали от 0 до 369 из 399
         * по горизониали от 0 до 389 из 399
         * **********************************/
        super.paintComponents(g);
        Graphics2D g2d = (Graphics2D)g;
        g2d.setPaint(Color.LIGHT_GRAY);
        g2d.fillRect(0, 0, 400, 400);                       // прямоугольник
        g2d.setPaint(Color.GREEN);                          // цвет
        g2d.drawRect(100, 100, 80, 20);                 // прямоугольник
        g2d.setPaint(Color.CYAN);
        g2d.fillRect(200, 100, 80, 20);
        g2d.setPaint(Color.BLACK);                          // цвет
        g2d.drawString("Привет, мир.", 150, 150);      // надпись
        g2d.setPaint(Color.BLUE);                           // цвет
        g2d.fillOval(120, 50, 50, 20);                  // закрашенный овал
        g2d.drawOval(210, 50, 50, 20);
        g2d.setPaint(Color.MAGENTA);
        g.drawArc(25, 225, 120, 120, 45, 270);
        g2d.setPaint(Color.PINK);
        g.drawRoundRect(225, 225, 100, 100, 25, 50);
        g2d.setPaint(Color.RED);
        g.drawLine(200, 170, 300, 170);
        g2d.setPaint(Color.WHITE);
        g.drawLine(0, 0, 9, 9);
        g.drawLine(0, 369, 9, 360);
        g2d.setPaint(Color.YELLOW);
        g.drawLine(379, 359, 389, 369);
        g2d.setPaint(Color.ORANGE);
        g.drawLine(379, 9, 389, 0);
        super.repaint();
    }
}
Если что-то трехмерное или стандартные окошки/кнопки, то без дополнительных библиотек просто никак.
0
590 / 413 / 135
Регистрация: 02.10.2008
Сообщений: 1,745
Записей в блоге: 1
09.10.2017, 10:54 15
Цитата Сообщение от stake-k26 Посмотреть сообщение
Если речь идет об окошках и кнопках а-ля "как в windows", то в этом случае только через иксы (x.org/wayland) с помощью gtk/qt. Если трехмерная графика, то OpenGL/Mesa, если графика + управление, то SDL + OpenGL.
Для кроссплатформенных окошек, я бы выбрал именно openGL, думаю и 2й, если даже не первой версии хватит. OpenGL это не только 3D, к тому же там есть поддержка мыши и клавы.
0
Croessmah
12.10.2017, 16:08     Как получить доступ к работе с графикой в Linux, не прибегая к использованию сторонних библиотек?
  #16

Не по теме:

Цитата Сообщение от JohnyWalker Посмотреть сообщение
Существует ещё оконный сервер Wayland, альтернатива X Window System, появившаяся совсем недавно, по принципу работы и функциональности совсем не похожая на X Server, но он очень мало где используется.
Fedora же, вроде уже использует, в Ubuntu 17.10 тоже хотели, но не знаю, сделали или нет.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2017, 16:08

Как реализовать на C# алгоритм blockchain без использования сторонних библиотек?
Добрый день! Хочу реализовать алгоритм blockchain в своём приложении (не для денежных операций)....

Как на с++(юникс) отправить http post запрос без сторонних библиотек
Ответ сервера не важен, главное - послать пост-запрос. boost, libcurl и прочее использовать нельзя....

Как определять какие ключи компиляции необходимы при использовании сторонних библиотек?
Захотелось мне скомпилировать программу, использующую Zlib, но компилятор ругается undefined...

Как ограничить доступ к использованию BB-кодов пользователям?
Всем привет! Подскажите пожалуйста, если у меня есть обычный форум с обычным набором бб-кодов, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru