Преобразуйте Пиксели в Дюймы и наоборот в C#

Из вашего скриншота , я думаю, вы просто неправильно его тестируете.

wrong

После ввода print('Hello'+input()) и нажатия клавиши Enter консоль уже находится в приглашении input() (в пустой строке), и ожидает вашего входа. Но вместо этого вы снова нажали клавишу Enter , поэтому input() получает пустую строку и печатает "Hello"+"", которая просто печатает "Hello".

Когда вы набираете «Джон», он уже обрабатывается как следующая строка кода (обозначено >>>), который Python рассматривает как переменную и пытается вывести значение of John, но это явно не определено, в результате вы видите ошибку.

Правильный способ, после ввода print('Hello'+input()), просто набрать John в пустой строке, чтобы передать его на input():

right [+1121]

8
задан Noldorin 16 July 2009 в 07:48
поделиться

3 ответа

На видеоустройстве любой ответ на этот вопрос обычно не очень точен. Самый легкий пример для использования для наблюдения, почему дело обстоит так проектор. Выходное разрешение, скажем, 1024x768, но DPI варьируется тем, как далеко далеко экран от проектора apeture. WPF, например, всегда принимает 96 DPI на видеоустройстве.

Для предположения Вас все еще нужен ответ, независимо от точности, и у Вас нет Графического объекта, можно создать один из экрана с некоторым P/Invoke и получить ответ от него.

Single xDpi, yDpi;

IntPtr dc = GetDC(IntPtr.Zero);

using(Graphics g = Graphics.FromHdc(dc))
{
    xDpi = g.DpiX;
    yDpi = g.DpiY;
}

if (ReleaseDC(IntPtr.Zero) != 0)
{
    // GetLastError and handle...
}


[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);    
[DllImport("user32.dll")]
private static extern Int32 ReleaseDC(IntPtr hwnd);
7
ответ дан 5 December 2019 в 12:13
поделиться

Нет, физически, никакого реального пути, не зная DPI. Пиксели дискретны, дюймы не, если Вы говорите дюймы на своем мониторе, необходимо знать (по крайней мере) разрешение (и попиксельная пропорция) и размер видимой области монитора для вычисления DPI. Разрешение обычно возможно выбрать где-нибудь (я не C# или программист.NET, таким образом, я не могу помочь Вам там), но размер монитора обычно не доступен. Если оценка достаточно хороша, затем сделали, чтобы пользователь ввел размер монитора (т.е. 21 дюйм или безотносительно) и решил для DPI:

(resX/DPI)^2 + (resY/DPI)^2 = screenDiagonal^2

предоставление (принятие Вас знают диагональ и разрешение),

DPI = sqrt(resX^2+resY^2)/screenDiagonal

Это - просто оценка, поскольку мониторы никогда не точно 21 дюйм (.. или безотносительно), и попиксельная пропорция почти никогда не точно 1:1.

Если Вы говорите дюймы на бумаге, то, вполне естественно необходимо знать DPI принтера (или, более точно, текущие параметры принтера).

6
ответ дан 5 December 2019 в 12:13
поделиться

Можно создать Графический объект просто путем вызова this.CreateGraphics() (или в более общем плане Control.CreateGraphics()) и затем используйте свойства DpiX и DpiY, поскольку Вы, кажется, знаете. Просто не забудьте располагать графический объект после создания его (идеально с оператором Using).

Если Вы не используете WinForms, то сообщите нам, какое приложение это.

1
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: