Android имеет разрешение, позволяющее приложениям рисовать поверх других приложений, но, как бы забавно это ни звучало, в основном оно использовалось для создания плавающих утилит многозадачности. Хотя они, безусловно, могут быть полезны, все же было бы неплохо, если бы это разрешение воспринималось буквально, и мы могли бы фактически рисовать поверх приложений.
Хорошо, если вы Мне когда-либо хотелось направить своего внутреннего Джона Мэддена и превратить ваше Android-устройство в телестратор, новое приложение от разработчика Дэниела Тана повсюду написано вашим именем. Это приложение, способное делать быстрые заметки или просто рисовать поверх любого экрана, полезно и весело.
Шаг 1. Установите «Рисование на экране»
Независимо от того, используете ли вы его для удовольствия рисовать пальцем на любом экране или вы планируете делать быстрые заметки, зайдите в магазин Google Play и выполните поиск Рисование на экране , чтобы установить приложение.
КАК РИСОВАТЬ Быстро используя 3D МОДЕЛЬ
Шаг 2. Ознакомьтесь с Элементы управления
Как только вы запустите Draw on Screen, вы увидите набор экранных элементов управления. Элементы управления внизу позволят вам отменять, удалять и скрывать сделанные вами рисунки. Верхняя панель управления позволяет изменять размер и цвет кисти, но для этих функций требуется покупка в приложении на сумму 1,69 доллара.
Вы также найдете текущий уведомление с возможностью отключения оверлея и отключения службы рисования на экране. Это удобно, если вы хотите, чтобы Draw on Screen работала в фоновом режиме, и выводить элементы управления на передний план только тогда, когда это удобно.
Шаг 3. Рисование поверх любого экрана
Каждый раз, когда отображаются экранные элементы управления, ваш палец можно использовать как кисть. Это означает, что любое приложение является подходящим холстом – просто проведите пальцем по экрану, чтобы нарисовать свой шедевр, или сделайте небольшую заметку.
Вы использовали Draw? на экране в первую очередь для заметок или вы просто для развлечения? Сообщите нам об этом в разделе комментариев ниже или напишите нам в Facebook или Twitter для Android Hacks, Facebook, Google+ или Twitter.
Обеспечьте безопасность подключения без ежемесячного счета . Получите пожизненную подписку на VPN Unlimited для всех своих устройств при единовременной покупке в новом магазине Gadget Hacks Shop и смотрите Hulu или Netflix без региональных ограничений, повышайте безопасность при просмотре в общедоступных сетях и многое другое.
Источник: futurei.ru
Рисование на экране Windows
Создание прозрачного окна для рисования поверх всех приложений
Недавно столкнулся с проблемой рисования поверх всех приложений чтобы при этом я мог продолжать в них работать, перерыв тучу сайтов нормального ответа толком и не нашел.
В данной статье мы рассмотрим, как создать прозрачное окно для рисования на языке Python, используя библиотеку PyQt5. Мы научимся создавать окно, настраивать его прозрачность и отображать его поверх всех окон на рабочем столе, сохраняя при этом функциональность и удобство использования для пользователей.
Для создания прозрачного окна мы будем использовать мощные инструменты, предоставляемые библиотекой PyQt5.
Шаг 2: Установка необходимых библиотек
Для создания прозрачного окна мы будем использовать библиотеку PyQt5, которая предоставляет мощные инструменты для создания графического интерфейса на основе Qt.
Для установки библиотек можно воспользоваться командой pip:
pip install PyQt5
pip install pyqt5-tools
Шаг 3: Импорт необходимых модулей
После установки библиотек мы можем импортировать их в наш код:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPainter, QBrush, QColor, QPen from PyQt5.QtCore import Qt, QTimer, QRect import random
Шаг 4: Определение класса DrawingWindow
Для создания прозрачного окна мы определяем класс DrawingWindow, который наследуется от класса QMainWindow. В конструкторе класса устанавливаются необходимые параметры окна, такие как заголовок, геометрия и флаги. Также инициализируется объект QPainter для рисования на окне.
class DrawingWindow(QMainWindow): def __init__(self, coordinates): super().__init__() # Устанавливаем заголовок окна self.setWindowTitle(«Прозрачное окно для рисования») # Устанавливаем геометрию окна, чтобы оно занимало весь экран self.setGeometry(0, 0, QApplication.desktop().screenGeometry().width(), QApplication.desktop().screenGeometry().height()) # Устанавливаем флаги, чтобы окно было без рамки и оставалось поверх других окон self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSt aysOnTopHint) # Создаем объект QPainter для рисования на окне self.painter = QPainter() self.painter.setRenderHint(QPainter.Antialiasing) # Устанавливаем начальный цвет пера (красный) и ширину пера (4 пикселя) self.pen_color = QColor(255, 0, 0) self.pen_width = 4 # Сохраняем переданные координаты прямоугольников для рисования self.coordinates = coordinates # Создаем таймер для обновления окна self.draw_timer = QTimer() # Запускаем таймер и устанавливаем интервал обновления окна (10 миллисекунд) self.draw_timer.start(10)
Шаг 5: Обновление и отображение окна
В функции paintEvent происходит обновление окна при каждом событии paintEvent. Мы используем объект QPainter для рисования на окне. Сначала рисуется прозрачный фон, затем рисуются прямоугольники с использованием координат из переменной self.coordinates.
def paintEvent(self, event): self.painter.begin(self) # Устанавливаем прозрачный фон self.painter.setPen(Qt.NoPen) self.painter.setBrush(QBrush(Qt.transparent)) self.painter.drawRect(QRect(0, 0, self.width(), self.height())) # Устанавливаем цвет пера и его ширину self.painter.setPen(QPen(QColor(self.pen_color), self.pen_width)) self.painter.setBrush(QBrush(Qt.transparent)) # Рисуем прямоугольники, используя переданные координаты for coord in self.coordinates: x, y, width, height = coord self.painter.drawRect(x, y, width, height) self.painter.end() # Обновляем координаты self.update_coord() # Планируем перерисовку через 1 секунду QTimer.singleShot(1000, self.update)
Шаг 6: Обновление координат
Координаты прямоугольников обновляются с помощью вызова метода update_coord(), который получает новые координаты с помощью функции R.run() из модуля ScreenCapture. Если новые координаты представлены в виде списка, то они сохраняются в переменную self.coordinates. В противном случае, новые координаты преобразуются в список и сохраняются.
def update_coord(self): self.coordinates = [(random.randrange(0, 1000), random.randrange(0, 1000), random.randrange(0, 1000)), (random.randrange(0, 1000), random.randrange(0, 1000), random.randrange(0, 1000))]
Шаг 7: Запуск приложения
При запуске определяются начальные координаты прямоугольников s_coordinates. Затем создается экземпляр класса Recognizer и окно DrawingWindow с передачей координат s_coordinates. Затем окно отображается с помощью метода show().
if __name__ == «__main__»: # Начальные координаты прямоугольников s_coordinates = [(524, 474, 84, 64), (524, 367, 84, 47)] app = QApplication(sys.argv) # Создаем экземпляр класса Recognizer # Создаем экземпляр класса DrawingWindow с передачей координат window = DrawingWindow(s_coordinates) # Отображаем окно window.show() # Запускаем цикл обработки событий приложения и выходим, когда цикл завершится sys.exit(app.exec_())
Теперь вы знаете, как создать прозрачное окно для рисования поверх всех приложений с использованием библиотеки PyQt5 на языке Python. Это может быть полезно при создании приложений или скриптов, которые требуют взаимодействия с пользователем без прерывания их работы. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.
Как видно четырехугольники прекрасно отображаются поверх Pycharm и при этом не мешают работать с ним. А вообще этот кейс является частью проекта за которым можно следить здесь
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPainter, QBrush, QColor, QPen from PyQt5.QtCore import Qt, QTimer, QRect import random class DrawingWindow(QMainWindow): def __init__(self, coordinates): super().__init__() self.setWindowTitle(«Transparent Drawing Window») self.setGeometry(0, 0, QApplication.desktop().screenGeometry().width(), QApplication.desktop().screenGeometry().height()) self.setAttribute(Qt.WA_TranslucentBackground, True) self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.painter = QPainter() self.painter.setRenderHint(QPainter.Antialiasing) self.pen_color = QColor(255, 0, 0) # Set the initial pen color to red self.pen_width = 4 # Set the initial pen width to 4 self.coordinates = coordinates # Store the coordinates for drawing rectangles self.draw_timer = QTimer() self.draw_timer.start(10) # Update the window every 10 milliseconds def paintEvent(self, event): self.painter.begin(self) self.painter.setPen(Qt.NoPen) self.painter.setBrush(QBrush(Qt.transparent)) self.painter.drawRect(QRect(0, 0, self.width(), self.height())) # Draw a transparent background self.painter.setPen(QPen(QColor(self.pen_color), self.pen_width)) self.painter.setBrush(QBrush(Qt.transparent)) for coord in self.coordinates: x, y, width, height = coord self.painter.drawRect(x, y, width, height) # Draw rectangles using the provided coordinates self.painter.end() self.update_coord() # Update the coordinates QTimer.singleShot(1000, self.update) # Schedule a repaint after 1 second def update_coord(self, coords=0): if coords != 0: pass else: self.coordinates = [ (random.randrange(0, 500), random.randrange(0, 500), random.randrange(0, 500), random.randrange(0, 500))] if __name__ == «__main__»: coordinates = [(524, 474, 818-524, 689-474), (524, 367, 818-524, 473-367)] app = QApplication(sys.argv) window = DrawingWindow(coordinates) # Create an instance of the DrawingWindow class with the given coordinates window.show() # Display the window sys.exit(app.exec_()) # Start the application event loop and exit when it’s finished
Источник: habr.com
Как рисовать поверх полноэкранного 3D приложения (как Fraps)?
Собственно задача такая: есть некий невизуальный сервис, который должен время от времени показывать всякие сообщения. В общем случае — картинку с альфа-прозрачностью. Причем эти сообщения должны быть видны в любом случае, даже если весь экран перекрыть 3D окном. Fraps очень красиво рисует свою циферку в углу — это самое то что надо. Вопрос — как это делается?
Научите?
#1
18:22, 6 мар 2006
subs.
Fraps рулит.
#2
19:21, 6 мар 2006
Была как-то идея, перехвата SwapBuffers.
#3
0:47, 8 мар 2006
Задай в поиске на этом сайте слово «FRAPS».
#4
3:03, 8 мар 2006
Не пытайся рисовать в буфер приложения утопия, как это сделать: созаеш окошко, как дочернее для полноэкранного и рисуеш в это окошко. В помощ тебе Спайдер из Визуал студии, можеш прехватить главное окно через Взять активное окно. msdn
#5
3:08, 8 мар 2006
Да у этого способа есть один минус нельзя рисовать близко к центру экрана, игры такого рода как контра будут вылетать если курсором нажать на созданое окно, зао с боку будет видно суперски !)
П.С.
Девушки с 8-м марта вас спите спокойно в своей кроватке 🙂
Источник: www.gamedev.ru