2009-04-01 3 views
3

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

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

ответ

5

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

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

+0

oooh, я был всего в нескольких секундах позади, отправил то же самое ... +1 –

+0

+1 Это делает его довольно простым. Я собирался опубликовать что-то о Toolkit.getDefaultToolkit(). GetScreenResolution(), который дает DPI экрана, но это по-прежнему требует некоторой математики после этого. –

+0

Я думал по этим линиям, а также к муравьям, затем я столкнулся с этим - у java есть свои моменты – Oli

0

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

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

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

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

-1

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

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

0

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

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

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

1

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

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

2

java.awt.Toolkit сообщит вам size of a pixel, и pixel dimensions of the screen. Это, однако, основывается на информации базовой системы, которая иногда может быть неправильно сконфигурирована.

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

+0

Нашел интересную статью, в которой подробно обсуждается, как это сделать. http://www.developer.com/java/other/print.php/626071 – javacavaj

+0

Как говорится в статье, этот метод не гарантирует точность. – DJClayworth

+0

Обратите внимание, что статья OLD - это говорит о JDK 1.2.2 –

1

В теории вы можете сделать это таким образом. 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 обсуждается это.

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

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

0

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

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

Изготовление 1" квадрат

int width = 1.0 * scalingFactor; 

и 2.5" квадрат

int width = 2.5 * scalingFactor; 

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

Смежные вопросы