Я сам не очень хорошо программирую, Я использую 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, но вместо физических расстояний я использовал определенные длины пикселей по горизонтали, еще раз измеряя PPI для этой длины (половина горизонтального разрешения моего монитора от «2560» до «1280»), что соответствует значению PPI для всего экрана «~91,76». Затем сценарий начнет измерение до установленного порога в 1280 пикселей или меньше и запустит расчет. Я могу опубликовать код этих попыток, но мне кажется, что лучше просто объяснить логику кода, чем показывать ее, поскольку я почти уверен, что код изначально был ошибочным.
Метод «двух точек» отличается от этой самой недавней попытки, но я также пробовал объединить их с более или менее одинаковыми результатами. Я понимаю, что это может быть отвлекающим маневром, и что PPI и DPI — это две разные вещи. Я пытаюсь выяснить, возможно ли это вообще. Логика этого, мне кажется, правдоподобной. Примечание. Я знаю, что Pynput используется в показанном фрагменте кода. Я не лицемер, я просто в отчаянии.
Подробнее здесь: https://stackoverflow.com/questions/785 ... -having-to