Есть ли способ получить доступ к оборудованию непосредственно в Python? - PullRequest
11 голосов
/ 24 декабря 2011

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

Я имею в виду, что я не хочу использовать какую-либо готовую графическую библиотеку, такую ​​как gnome, cocoa и т. Д. Я обычно использую Python для кодирования, и моя программа использует Python, но я также могу кодировать и интегрировать модули C с ним.

Мне известно, что доступ к аппаратному обеспечению экрана напрямую устраняет многоплатформенность Python, но я игнорирую это ради обучения. Итак: есть ли способ получить доступ к оборудованию напрямую в Python, и если да, то что это?

Ответы [ 3 ]

7 голосов
/ 24 декабря 2011

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

Я говорю DOS, а не Linux или NT, потому что ни один из них не дастВы получаете прямой доступ к видеооборудованию без написания драйвера.Это означает, что нужно изучить весь API-интерфейс драйвера, и вам нужно задействовать много «волшебства», что не будет очевидным, поскольку написание видеодрайвера в Windows NT довольно сложно.

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

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

2 голосов
/ 27 декабря 2011

Кажется, это отличный путь для самообучения, и я бы добавил сумму в два цента и предложил бы вам взглянуть на GObject , Каир и Pygame модули некоторое время.

Модуль Python GObject может быть на более высоком уровне, чем ваш текущий интерес, но он позволяет рисовать на уровне пикселей с Cairo (см. home page ), а также предоставляет общую базу для переносимых приложений с графическим интерфейсом, использующих Python

Pygame , также имеет методы уровня пикселей, а также методы доступа к графическим драйверам (наболее высокий уровень) - вот быстрый пример кода

1 голос
/ 25 августа 2013

Сейчас это довольно старая тема, но я наткнулся на нее, размышляя над тем же вопросом.

Раньше я программировал на ассемблере.В мое время рисование на экране было просто (?) Вопросом вставки значения в ячейку памяти.Значение включало или выключало пиксель и определяло его цвет.

Кстати, термин «poke» происходит от Basic, а не от ассемблера.В ассемблере вы должны были записать значение в регистр данных, а затем сообщить процессору, куда поместить данные, используя другую команду и указав адресный регистр, обычно в шестнадцатеричной форме!И у каждого процессора был свой язык ассемблера.Но он был быстрым кодом!

С развитием аппаратного обеспечения я обнаружил, что графическое аппаратное программирование становится все более и более сложным.Это намного больше, чем просто определение пикселя.Графическая подсистема имеет свой собственный процессор - или процессоры - и это то, что вы должны научиться общаться.Процессор не просто помещает вещи в ячейки памяти.(Я полагаю, что когда-то был самым быстрым суперкомпьютером в мире, который когда-то работал на графических чипах!) Кстати, «Plonk» не является базовой командой.

Извините;Я отвлекся.В ответ на первоначальный запрос автора я считаю, что цель понимания процесса рисования графики могла бы быть наилучшим образом достигнута путем экспериментов с Raspberry Pi.Это Python-совместимый и, следовательно, идеально подходит для работы.Его оборудование хорошо документировано, оно дешевое и простое в использовании.

Надеюсь, это кому-нибудь поможет, ура, M

...