Как нарисованы графические интерфейсы? - PullRequest
5 голосов
/ 16 октября 2010

Как люди делают GUI? Я имею в виду базовый строительный блок или принцип, который они использовали для рисования визуальных компонентов на экране, таких как KDE, Gnome и т. Д. Существуют ли простые примеры того, как нарисовать что-то вроде прямоугольника на экране, непосредственно работая с оборудованием?

Я использую ПК для тех, кто спрашивает о моей платформе.

Ответы [ 4 ]

6 голосов
/ 16 октября 2010

Ну ладно, начнем с самого низа.У вас есть монитор, который отображает изображение.Это изображение представляет собой матрицу пикселей, скажем, 1600x1200 пикселей с глубиной 24 бита.

Монитор знает, что отображать с видеоадаптера.Видеоадаптер знает, что отображать через «буфер кадров», который является большим блоком памяти, который - в этом примере - содержит 1600 * 1200 пикселей, обычно с 32 битами на пиксель в современных картах.

кадровый буфер часто доступен для ЦП в виде большого блока и памяти, в которую он может напрямую вставлять, и некоторые адаптеры имеют графические процессоры, которые позволяют выполнять такие вещи, как рендеринг материала в буфер кадров, например затененные текстурированные треугольники, поэтому ЦП просто посылает команды через«буфер команд», указывающий, что и где рисовать.

Затем у вас есть операционная система, которая загружает драйвер оборудования, который связывается с видеоадаптером.

Операционная система обычно предлагаетфункции для записи в буфер кадров с использованием функций.Например, в Win32 есть множество функций, таких как BitBlt, Line, Text и т. Д. В итоге они будут общаться с драйвером.

Затем у вас будет что-то вроде Java, которое отображает свою собственную графику, обычно используя функции, предоставляемыеоперационная система.

3 голосов
/ 16 октября 2010

Простой ответ: битовые карты , на самом деле это также относится к шрифтам на терминалах в первые дни.

Оригинальные графические интерфейсы, такие как Alto GUI Xerox Parc были основаны на растровых изображениях, а графика была нарисована с помощью простых растровых инструментов рисования и графических библиотек, используя простую геометрию для определения форм, таких как круги, квадраты, прямоугольники и т. д., а затем сопоставить их для отображения пикселей.

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

Основное отображение битов, например От 10101010 до пикселей зависит от аппаратного обеспечения дисплея, но на упрощенном уровне вы бы обеспечили буфер отображения в памяти и просто заполнили его байты данными дисплея.

Итак, для базового монохромного растрового изображения вы должны нарисовать его, предоставив биты, представляющие форму, которую вы хотите нарисовать, вы можете либо расположить эти биты, например, простой кнопкой 8x8pix.

01111110
10000001
10000001
10111101
10111101
10000001
10000001
01111110

Что вы можете увидеть легче, если я отобразлю это с # и ПРОБЕЛОМ вместо 1 и 0.

 ###### 
#      #
#      #
# #### #
# #### #
#      #
#      #
 ###### 

Который как растровое изображение будет выглядеть следующим образом: http://i.stack.imgur.com/i7lVQ.png (я знаю, что он немного маловат :), но это тот масштаб, с которого мы начинали, когда GUI были впервые разработаны.)

Если бы у вас был более сложный (например, 24-битный цветной дисплей, вы бы предоставили каждый пиксель, используя 24-битное число.)

Очевидно, что некоторые растровые изображения не могут быть нарисованы вручную (например, граница окна), как мы это делали выше, это где геометрия пригодится, и мы можем использовать простые функции для определения значений пикселей, необходимых для рисования прямоугольник или любую другую простую фигуру, а затем строим оттуда.

Как только вы сможете рисовать таким образом графику на дисплее, вы подключаете цикл рисования к системному прерыванию, чтобы поддерживать отображение в актуальном состоянии (вы часто перерисовываете экран, в зависимости от производительности вашей системы.) Это как вы можете заставить его обрабатывать взаимодействие с пользовательскими устройствами, например мышь.

В первые годы, еще до того, как в Xerox Parc / Alto существовал ряд ранних компьютерных систем, которые имели векторные дисплеи, они создавали изображение путем рисования линий на ЭЛТ-представлении декартовой плоскости. Тем не менее, эти дисплеи никогда не видели массового использования, за исключением, возможно, в некоторых ранних видеоиграх, таких как Asteroids и Tempest.

0 голосов
/ 16 октября 2010

Если вы хотите просмотреть большую часть исходного кода, вы можете взглянуть на Mesa 3D , реализацию OpenGL-спецификации с открытым исходным кодом.

0 голосов
/ 16 октября 2010

Возможно, вам нужна графическая библиотека, например, OpenGL .

Для прямого взаимодействия с оборудованием вам, вероятно, нужно выполнить что-то вроде сборки, которая полностью зависит от компьютера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...