Форма в «Фактическом размере» - PullRequest
3 голосов
/ 02 апреля 2009

Какой простой способ визуализации фигуры в Java до ее «фактического размера». Например, у меня есть трубка диаметром 1 дюйм, и я хочу изобразить ее на экране в виде контура 1-дюймового круга. Метод Graphics2D drawOval (int x, int y, int width, int height) принимает высоту и ширину в пикселях. Каковы шаги для перевода размера пикселя в размер, отображаемый на экране?

Заранее спасибо.

Ответы [ 8 ]

5 голосов
/ 02 апреля 2009

Метод getNormalizingTransform () класса GraphicsConfiguration выглядит так, как будто он имеет некоторый потенциал

http://java.sun.com/javase/6/docs/api/java/awt/GraphicsConfiguration.html#getNormalizingTransform()

2 голосов
/ 02 апреля 2009

java.awt.Toolkit сообщит вам размер в пикселях, и размеры экрана в пикселях. Однако это основано на информации из базовой системы, которая может иногда быть неправильно настроенным.

Итак, чтобы нарисовать 1-дюймовый круг, вы должны использовать диаметр 1.0 * tk.getScreenResolution(), 2,5-дюймовый круг 2.5 * tk.getScreenResolution() и т. Д.

1 голос
/ 02 апреля 2009

Теоретически вы можете сделать это таким образом. Java.awt.Toolkit сообщит вам размер пикселя и размеры экрана в пикселях. Таким образом, чтобы нарисовать 1 "круг, вы должны использовать диаметр 1,0 * tk.getScreenResolution (), 2,5" круг - 2,5 * tk.getScreenResolution () и т. Д. Или вы можете использовать метод GraphicsConfiguration.getNormalizingTransform () который регулирует разрешение до «фиксированного» размера.

К сожалению, оба эти метода полагаются на базовую систему, которая знает (и сообщает вам) фактическое разрешение вашего экрана. На практике это происходит очень редко. Все виды вещей могут повлиять на фактический размер пикселя. Фактический размер и производитель монитора один, а некоторые мониторы даже позволяют регулировать размер изображения на экране.

В этой статье http://www.developer.com/java/other/print.php/626071 обсуждается это.

Как правило, принтеры лучше сообщают вам свое реальное разрешение. Если вам абсолютно необходимо иметь изображение правильного размера, отправьте его туда.

Благодарность различным ответам, из которых я синтезировал этот.

1 голос
/ 02 апреля 2009

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

Поэтому, если вам действительно нужны точные результаты, единственный способ - позволить пользователю настроить интерактивную линейку, отображаемую на экране, и сравнить ее с реальной линейкой.

0 голосов
/ 02 апреля 2009

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

float scalingFactor = Toolkit.getDefaultToolkit().getScreenResolution() / 72f;

Создание 1 "квадрата

int width = 1.0 * scalingFactor;

и 2,5 "квадрат

int width = 2.5 * scalingFactor;

Все это из-за того, что Java2D принимает разрешение экрана 72 dpi, и если система настроена по-другому, вам нужно увеличить масштаб, чтобы исправить это.

0 голосов
/ 02 апреля 2009

Ну, вам понадобится размер монитора и разрешение. Скажем, монитор 17 "с соотношением сторон 1280: 1024.

Размер экрана - это гипотенуза, поэтому вам нужно найти количество пикселей на гипотенузе. Простая геометрия позже, вы можете получить расчет пикселей / дюйм.

1280px ^ 2 + 1024px ^ 2 = c ^ 2, c ~ = 1639.2px. Таким образом, для 17-дюймового монитора с разрешением 1280x1024 он составляет 1639,2 пикселей / 17 дюймов = 96,4 пикселей / дюйм. Это должно быть введено пользователем.

0 голосов
/ 02 апреля 2009

Это любопытный вопрос, о котором я даже не задумывался. Вдобавок ко всему, вам, вероятно, потребуется знать комбинацию размера экрана (17 ", 21" и т. Д.), Разрешения экрана ("800x600, 1280x1024 и т. Д.) И DPI экрана (72, 96, 120 и т. Д.).

С помощью различных API вы можете определить разрешение экрана, а возможно dpi ... но удачи вам с размером экрана. И даже несмотря на это, вы все равно не гарантированно получите правильный размер на экране.

0 голосов
/ 02 апреля 2009

Проблема, с которой вы столкнетесь, заключается в том, что пиксели не всегда имеют одинаковый размер. Например, квадрат размером 100 x 100 пикселей будет иметь разные размеры на 17 "мониторе 1280 x 1024 и 19" 1280 x 1024 мониторе.

Я не верю, что есть API, который сообщает вам физический размер дисплея.

Спросить пользователя о размере его монитора может не помочь, так как многие просто не узнают.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...