« もっともsuckでないソフト | メイン | PDFの作成方法(21) – PDFドライバの解像度(続き) »

2006年02月13日

PDFの作成方法(20) – PDFドライバの解像度

2005年11月18日にPostScriptプリンタドライバとGDI型PDFプリンタドライバの相違について、WindowsのGDIの影響を受けるかどうか、という違いがあることを説明し、具体的な例として、カラーの処理を挙げました。

今日は、もうひとつの例として、解像度の問題を取り上げてみます。

Microsoft Windows、及びそのアプリケーションはディスプレイやプリンタを統一のGDI (graphics device interface)という機能を使って扱っています。アプリケーションが、直接、プリンタやディスプレイなどの物理デバイスに出力することはできません。原則としてGDI経由の出力になります。

プリンタでの印刷やディスプレイなどの表示デバイスには解像度という表示能力を表す尺度があり、dpiという単位で表します。dpiとはインチあたりのドット数の略です。デバイス上の1ドットは物理的なものです。これに対して、WindowsGDIの上では画像は1ピクセル単位で処理します。ピクセルというのは論理的なものですので、実際の出力ではGDI上のピクセルがデバイスのドットに割り付けられます。この割付はWindowsやデバイス・ドライバの役割となります。(以下、ここではとりあえず、ドットとピクセルを区別しないで考えます。)

GDI上で線を引くときは、ピクセル単位の塗りつぶしで表現します。ですので、次の図のように、GDIの上で表示できる線の最小の太さは1ピクセル幅ということになります。これは、デバイスの上では1ドット幅の線に相当します。

図 表示できる最小の線幅
BitmapDisplay.PNG

ここから予想されることは、アプリケーション・ソフトが細い直線を引いたとしても、GDIを経由する限り、それを実際にディスプレイの画面に表示したり、物理的なプリンタに出せるとは限らないということです。

実例で試してみましょう。まず、直線の太さを0.01ポイントから少しずつ太くしていくようなデータを作ります。

表示に使用するWindowsのディスプレイは、96dpi(1インチに96ドット)の解像度に設定してありますので、このディスプレイの上の1ドットの大きさは、(72ポイント/1インチ)÷(96ドット/1インチ)=0.75ポイントとなっています。
∵1インチは72ポイント。96dpiは1インチに96ドット。

1ポイントは約0.35mmですので、100分の1ポイントは、0.0035mmに相当します。このような細い線を指定できるWindowsアプリケーションは少ないと思いますので、普段はあまり眼にしたことがないかもしれません。XSL Formatterを使って、この線を表示してみます。

図 Windowsの画面にどの位の太さの線を表示できるか
BitmapDisplay-0214.PNG

この表示結果を見ますと、Windowsはディスプレイ上の1ドット相当よりも細い線も画面に表示しているようです。但し、細い線は正しく表示できていないことが理解できます。これは、ディスプレイの物理的な表示能力を超えているのですから、まあ、やむを得ないともいえます。(2006/2/14削除)

この表示結果を見ますと、Windowsは、ディスプレイ上で1ドット相当よりも細線も表示しています。これは、WindowsのGDIは1ドット相当よりも細い線については1ドットにして表示するためだそうです。(2006/2/14挿入)

解像度に応じて、ドットの大きさがどの位になるかを次の表に示しました。ディスプレイと比較しますとプリンタの解像度はもっと大きいのが普通です。通常のプリンタですと300dpiから600dpiでしょうか。例えば、600dpiのプリンタでは1ドットの大きさは0.12ポイントとなります。

DPI 1ドットの幅(単位:ポイント)
72 1.00
96 0.75
144 0.50
300 0.24
600 0.12
1200 0.06
2400 0.03

さて、例えば、Microsoft Word2003の罫線は、細いほうから1/4ポイント、1/2ポイント、3/4ポイントが設定できます。そうしますと、上の表から、この太さの線を正しく表示するのには、最低限600dpi、144dpi、72dpiの解像度が必要ということになります。

次に、実際に試して見ましょう。
Microsoft Word2003で、1/4ポイント、1/2ポイント、3/4ポイントの太さの罫線を引きます。

Wordの画面(200%に拡大)は次のようになります。

図 Wordの画面(200%拡大)
Word1-Original.PNG

・200%拡大しても1/4ポイント、1/2ポイントの線の太さは画面上で識別できません。

これをWordからアンテナハウスPDFドライバを使って、解像度設定を72dpi、300dpi、600dpiに設定してPDFを作成します。これを、Adobe Readerで300%に拡大して画面に表示します。

図 GDI型PDFドライバの解像度72dpiの時のPDFの線の太さ
Word1-AHPDF-72dpi.png

・72dpiでは3種類の線の太さを識別できていないことがわかります。

図 GDI型PDFドライバの解像度300dpiの時のPDFの線の太さ
Word1-AHPDF-300dpi.png

・300dpiではPDFの上でも3種類の線の太さが判別できます。

図 GDI型PDFドライバの解像度600dpiの時のPDFの線の太さ
Word1-AHPDF-600dpi.png

・600dpiは、画面上で拡大してみる限り、300dpiとあまり変わりません。

この3つの例から、GDI型PDFドライバでPDFを作成するとき、正しく表示できる線の太さは解像度設定によって変わることがわかります。これはGDI型PDFドライバは、WindowsのGDIの仕組みに依存しており、GDIがドット単位での処理を行っているためです。大雑把に言えば、どのGDI型PDFドライバでも似たような結果になるはずです。

投稿者 koba : 2006年02月13日 08:00

トラックバック

このエントリーのトラックバックURL:
http://blog.antenna.co.jp/PDFTool/mt-tbng2.cgi/161

このリストは、次のエントリーを参照しています: PDFの作成方法(20) – PDFドライバの解像度:

» PDFドライバとの関係で考える・GDIは1ピクセルよりも細い線を扱えないのか!? from Ride The Time! オータム マガジン
 以下の文章を読んで、GDIについて1つだけ書いておくのも悪くないと思いした。 あまりに多くの常識が置き去りにされている時代なので。PDFの作成方法(20) †... [続きを読む]

トラックバック時刻: 2006年02月14日 12:14

コメント

プログラムが修正されて、細い線も画面に表示できるようになりました。これに伴い、画像を差し替え、本文を訂正しました。(2006/2/14)

投稿者 koba : 2006年02月14日 10:54

ブログ書いてて、幾つか疑問があったので、開発担当者に質問したところ、えらいことが分かりました。

WindowsGDIでは、線の太さゼロで指定しても、最低1ピクセル幅の線を表示するのが仕様だそうです。

それで、細い線が表示されないのがなぜかというと、これは、XSL Formatter のバグなんだそうです。(偶然、バグを見つけてしまったことになります)。

このブログにはちょっとばかり嘘が書いてあるってことです。(汗)
あとで、プログラムが修正されたら、また、ブログで報告します。

投稿者 koba : 2006年02月13日 19:48

コメントしてください




保存しますか?