形状为“实际尺寸”

时间:2009-04-01 20:44:55

标签: java

将Java中的形状渲染为“实际大小”的简便方法是什么。例如,我有一个直径为1“的管子,我想在屏幕上将其描绘成1”圆的轮廓。 Graphics2D方法drawOval(int x,int y,int width,int height)采用高度和宽度(以像素为单位)。将像素大小转换为屏幕上呈现的大小的步骤是什么?

提前致谢。

8 个答案:

答案 0 :(得分:5)

GraphicsConfiguration类的getNormalizingTransform()方法看起来有点潜力

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

答案 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()等。

答案 2 :(得分:1)

您应该知道,即使您可能能够了解屏幕尺寸和分辨率,您仍然无法确定所显示图片的实际尺寸。如果用户具有CRT屏幕,则屏幕可能略小于实际屏幕尺寸。

因此,如果您确实需要准确的结果,唯一的方法是让用户以交互方式调整屏幕上显示的标尺并将其与实际标尺进行比较。

答案 3 :(得分: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对此进行了讨论。

打印机通常更善于告诉您真正的解决方案。如果你绝对必须有一张尺寸正确的照片,请发送到那里。

对我合成这个答案的各种答案的致谢。

答案 4 :(得分:0)

您将遇到的问题是像素并不总是相同。例如,在17“1280 x 1024显示器和19”1280 x 1024显示器上,100 x 100像素的正方形尺寸将不同。

我不相信有一个API可以告诉你显示器的物理尺寸。

询问用户显示器的大小可能没什么帮助,因为很多人根本不知道。

您可以在屏幕上显示多行,让用户点击哪一行最接近1英寸并将所有渲染缩放到那个,但它有点笨拙。

答案 5 :(得分:0)

嗯,您需要显示器和分辨率的大小。假设显示器为17英寸,宽高比为1280:1024。

屏幕尺寸是斜边,因此您需要找到斜边上的像素数。稍后简单的几何图形,您可以获得像素/英寸计算。

1280px ^ 2 + 1024px ^ 2 = c ^ 2,c~ = 1639.2px。因此对于分辨率为1280x1024的17英寸显示器来说,它是1639.2px / 17英寸= 96.4px /英寸。这必须由用户输入。

答案 6 :(得分:0)

我的印象是,仅仅通过Toolkit获取屏幕分辨率还不够。我认为你需要做更多的事情

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

制作1“方形

int width = 1.0 * scalingFactor;

和2.5“方形

int width = 2.5 * scalingFactor;

所有这一切都是Java2D采用72 dpi的屏幕分辨率,如果系统设置不同,则需要按比例放大以纠正此问题。

答案 7 :(得分:-1)

这是一个奇怪的问题,我没有想过。在我的脑海中,您可能需要知道屏幕尺寸(17“,21”等),屏幕分辨率(“800x600,1280x1024等)和屏幕DPI(72,96, 120等。)。

通过各种api,您可以确定屏幕分辨率,可能 dpi ...但屏幕尺寸可以好运。即便如此,您仍然无法保证在屏幕上生成正确的尺寸。