2009-04-01 14 views
3

Javaの図形を「実際のサイズ」にレンダリングする簡単な方法は何ですか。例えば、私は直径1インチのチューブを持っていて、それを1インチの円の輪郭として画面上に描きたいのです。 Graphics2DのdrawOval(int x、int y、int width、int height)は、ピクセル単位で高さと幅を取ります。ピクセルサイズを画面上のレンダリングサイズに変換する手順は何ですか?「実際のサイズ」の形状

ありがとうございます。

答えて

5

クラスのGraphicsConfigurationのgetNormalizingTransform()メソッドは、それが持っているように見えるいくつかの潜在的な

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

+0

ああ、私はちょうど同じことを投稿して、数秒後だった... +1 –

+0

+1それはかなり簡単になります。私はスクリーンのDPIを与えるToolkit.getDefaultToolkit()。getScreenResolution()について何かを投稿しようとしていましたが、それでも後で数学が必要です。 –

+0

私はこれらの行に沿って考えていましたが、私はこれに遭遇しました - javaはその瞬間があります – Oli

0

問題は、ピクセルが常に同じサイズであるとは限りません。例えば、100×100ピクセルの正方形は、17インチの1280×1024のモニタと19インチの1280×1024のモニタでは異なるサイズになります。

ディスプレイの物理的なサイズを示すAPIはないと思います。

多くの人がわかりませんので、モニタのサイズを助けてくれないかもしれません。

複数の行を画面に表示して、どれが1インチに最も近いかをクリックしてすべてのレンダリングをスケールすることができますが、ちょっと面倒です。

-1

これは好奇心の問題、私は考えていないものです。私の頭の上からは、画面のサイズ(17インチ、21インチなど)、画面の解像度(「800x600,1280x1024」など)と画面のDPI(72,96,100など)の組み合わせを知る必要があるでしょう。 120など)。

さまざまなapiを使って、画面の解像度を決定することができます。 dpi ...しかし、画面サイズでうまくいくことができます。

0

さて、モニターのサイズと解像度が必要です。モニターが1280:1024のアスペクト比で17インチの場合を考えてみましょう。

画面のサイズは斜辺ですので、斜辺のピクセル数を確認する必要があります。後で単純なジオメトリ、ピクセル/インチの計算を得ることができます。

1280px^2 + 1024px^2 = c^2、c = 1639.2px。したがって、解像度は1280x1024の17インチモニターで1639.2px/17inch = 96.4px/inchです。これはユーザーが入力する必要があります。

1

画面のサイズと解像度について知ることができても、表示される画像の実際のサイズがわからない場合もあります。ユーザーがCRT画面を持っている場合、画面は実際の画面サイズより少し小さくなる可能性があります。

実際に正確な結果が必要な場合、唯一の方法は、画面に表示されているルーラーをユーザーが対話的に調整し、実際のルーラーと比較させることです。

2

java.awt.Toolkitは、と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()メソッドを使用することもできます解像度を「固定」サイズに調整します。

残念なことに、これらの両方の方法は、画面の実際の解像度を知っている(そしてあなたに伝えている)基盤システムに依存しています。実際には、これはほとんど起こりません。あらゆる種類のものがピクセルの実際のサイズに影響する可能性があります。モニタの実際のサイズとメイクは1つで、一部のモニタでは画面上の画像のサイズを調整することもできます。

この記事http://www.developer.com/java/other/print.php/626071でこれについて説明しています。

一般的に、プリンタは実際の解像度を教えてくれます。正しいサイズの写真が絶対に必要な場合は、そこに送ってください。

私はこれを合成した様々な回答に謝辞を述べます。

0

私は、Toolkitの画面解像度を取得するだけでは十分ではなかったという印象を受けました。私はあなたが1" 平方

int width = 1.0 * scalingFactor; 

と2.5" 平方

int width = 2.5 * scalingFactor; 

このすべて2Dでは想定していることであることを作る

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

の線に沿ってより多くの何かをする必要があると思います72 dpiの画面解像度で、システムの設定が異なっている場合は、これを補正するためにスケールアップする必要があります。

関連する問題