Мне нужна помощь в написании сценария Python, который вычисляет dpi мыши без необходимости физического измерения расстояPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Мне нужна помощь в написании сценария Python, который вычисляет dpi мыши без необходимости физического измерения расстоя

Сообщение Anonymous »

Итак, я набираю текст, чтобы написать сценарий, который сможет рассчитать разрешение мыши на основе того, как далеко перемещается курсор мыши. На данный момент у меня есть несколько многообещающих версий сценария, но, кажется, ничего не работает так, как я хочу. В основном я использую библиотеку ctypes и другие, в основном все, кроме библиотек py, но я не против использовать их, если понадобится.
Я сам не очень хорошо программирую, Я использую Bing Copilot (ChatGPT-4), чтобы писать и задавать вопросы. Я не совсем невежественен в программировании, и, делая это, я немного узнал о программировании на Python, но мне нужен человек, который бы это взвесил.
Чтобы быть ясным , это я пытаюсь найти неизвестное значение DPI из заданного значения dpi, чтобы найти любое отклонение DPI у моих многочисленных мышей. АКА, в моем программном обеспечении для мыши установлено значение DPI мыши на 900, но на самом деле оно около 862 или что-то в этом роде. Я знаю, что мог бы использовать обычный анализатор DPI и самостоятельно измерить расстояние с помощью линейки, но я пытаюсь исключить человеческую ошибку из уравнения, потому что мне трудно доверять показаниям, которые я получаю, делая это таким образом. .
Это код, над которым я сейчас работаю:

Код: Выделить всё

import ctypes
from pynput.mouse import Listener
import math

# Constants for screen resolution and physical dimensions
SCREEN_WIDTH_PX = 2560
SCREEN_HEIGHT_PX = 1440
SCREEN_DIAGONAL_IN = 27.9

# Calculate the screen width and height in inches
screen_width_in = (SCREEN_WIDTH_PX / SCREEN_HEIGHT_PX) * (SCREEN_DIAGONAL_IN / (math.sqrt(1 + (SCREEN_HEIGHT_PX / SCREEN_WIDTH_PX) ** 2)))
screen_height_in = (SCREEN_HEIGHT_PX / SCREEN_WIDTH_PX) * screen_width_in

# Function to calculate DPI
def calculate_dpi(distance_px, distance_in):
# Check to prevent division by zero
if distance_in == 0:
return 0
return distance_px / distance_in

# Function to convert pixels to inches
def px_to_in(px, axis):
# Check to prevent division by zero
if axis == 'x' and screen_width_in != 0:
return px / (SCREEN_WIDTH_PX / screen_width_in)
elif axis == 'y' and screen_height_in != 0:
return px / (SCREEN_HEIGHT_PX / screen_height_in)
return 0

# Mouse movement callback
def on_move(x, y):
# Calculate the distance moved in pixels
distance_px_x = abs(x - SCREEN_WIDTH_PX / 2)
distance_px_y = abs(y - SCREEN_HEIGHT_PX / 2)

# Convert pixels to inches
distance_in_x = px_to_in(distance_px_x, 'x')
distance_in_y = px_to_in(distance_px_y, 'y')

# Calculate DPI for both axes
dpi_x = calculate_dpi(distance_px_x, distance_in_x)
dpi_y = calculate_dpi(distance_px_y, distance_in_y)

# Only print DPI if distance_in is not zero
if distance_in_x > 0 and distance_in_y > 0:
print(f"Moved {distance_px_x} px (X-axis), which is {distance_in_x:.2f} in")
print(f"Moved {distance_px_y} px (Y-axis), which is {distance_in_y:.2f} in")
print(f"DPI (X-axis): {dpi_x:.2f}")
print(f"DPI (Y-axis): {dpi_y:.2f}")

# Set the process DPI aware to capture the true resolution
ctypes.windll.user32.SetProcessDPIAware()

# Start capturing mouse movement
with Listener(on_move=on_move) as listener:
listener.join()
Я даже не знаю, что сказать о том, что я пробовал. Я пробовал несколько различных методов, начиная от использования эталонного расстояния для PPI с использованием определенного значения dpi, например 900, расчета PPI для моего монитора и запуска сценария, который пытается измерить движение моей мыши относительно эталонного значения, чтобы получить показания отклонения. это будет мое «Истинное разрешение», или я так надеялся.
До сих пор каждый раз, когда я пытаюсь «определить» PPI, показания, которые я получаю, всегда возвращаются как то же значение, которое я установил для справки, или просто полная чушь. Идея состоит в том, чтобы измерить расстояние между двумя точками, как это делают большинство других анализаторов DPI, но вместо физических расстояний я использовал определенные длины пикселей по горизонтали, еще раз измеряя PPI для этой длины (половина горизонтального разрешения моего монитора от «2560» до «1280»), что соответствует значению PPI для всего экрана «~91,76». Затем сценарий начнет измерение до установленного порога в 1280 пикселей или меньше и запустит расчет. Я могу опубликовать код этих попыток, но мне кажется, что лучше просто объяснить логику кода, чем показывать ее, поскольку я почти уверен, что код изначально был ошибочным.
Метод «двух точек» отличается от этой самой недавней попытки, но я также пробовал объединить их с более или менее одинаковыми результатами. Я понимаю, что это может быть отвлекающим маневром, и что PPI и DPI — это две разные вещи. Я пытаюсь выяснить, возможно ли это вообще. Логика этого, мне кажется, правдоподобной. Примечание. Я знаю, что Pynput используется в показанном фрагменте кода. Я не лицемер, я просто в отчаянии.


Подробнее здесь: https://stackoverflow.com/questions/785 ... -having-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»