画像のdpi(画像解像度)を取得/設定するには?[C#、VB].NET TIPS

» 2009年12月24日 05時00分 公開
[一色政彦デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

 .jpgファイルや.pngファイルなどの画像ファイルでは、画像のサイズとして、画素数(ピクセル数)以外にも、画像解像度(dpi:Dots Per Inch。インチ当たりのドット数)を持つ。両者とも幅と高さのそれぞれで値を持つ。

 画像解像度は画像を印刷するときなどに重要となる。例えば、画面上で幅302ピクセルの画像を、印刷時に何インチとするかを画像解像度が決定する。解像度が96dpiの画像であれば、印刷時には3.15inch(=8cm:センチ・メートル)となる(1inch=2.54cm)。また、印刷やWYSIWYGを重視する一部のアプリケーションでは、画面上でも(ピクセル数よりも)この画像解像度を重視するものがある。例えば文書作成アプリケーションのMicrosoft Wordは、画像が貼り付けられたとき、その解像度を基にWordドキュメント上での表示サイズを決定する。

 Windowsでは、ディスプレイ解像度(=画面解像度)のデフォルト値は96dpiとなっているため、例えば300dpiの画像解像度を持つ画像をWordに貼り付けると、(実際のピクセル・サイズよりも)小さいサイズで表示されてしまう。これを防ぐには、画像解像度をディスプレイ解像度と同じ、96dpiに変更する必要がある。

 次の画面は、300dpiの元画像と、それを96dpiに変更した画像を、それぞれWord上に貼り付けた例だ。

Word上に貼り付けた300dpiの画像と96dpiの画像

 このように、画像解像度の値を変更したいときがある。そこで本TIPSでは、画像解像度を取得/設定する方法を説明する。

●画像解像度を取得する方法

 まず、画像解像度を取得するには、Imageクラス(System.Drawing名前空間)のオブジェクトが持つHorizontalResolutionプロパティとVerticalResolutionプロパティを取得すればよい(取得のみで、設定はできない)。HorizontalResolutionプロパティは、水平解像度、つまり画像の幅のdpiを取得できる。VerticalResolutionプロパティは垂直解像度、つまり画像の高さのdpiを取得できる。

 ちなみにImageクラスから派生したBitmapクラス(System.Drawing名前空間)などでも同様のプロパティを利用できる。

●画像解像度を設定する方法

 次に、画像解像度を設定するには、BitmapオブジェクトのSetResolutionメソッドを用いればよい。SetResolutionメソッドの第1パラメータには水平解像度(dpi)を指定し、第2パラメータには垂直解像度を指定する。戻り値はない。

 なお、筆者が試した限り、既存の画像ファイルから作成したBitmapオブジェクトに対してSetResolutionメソッドを呼び出すと、確かに画像解像度は変更されるのだが、そのBitmapオブジェクトのSaveメソッドで画像ファイルとして保存した場合、設定した画像解像度が適用されず、元の画像解像度で保存されてしまうので、注意してほしい。設定した画像解像度で保存するには、新規にBitmapオブジェクトを作成する必要があるようだ。

●画像解像度を取得/設定するサンプル

 最後に、サンプルとして上記の画像解像度の取得/設定方法を試してみよう。次のコードは、「C:\picture.png」という画像ファイルを読み込み、画像解像度を取得する。そして、その水平解像度や垂直解像度が96dpiでなければ、同じピクセル・サイズで、かつ96dpiの画像解像度を持つBitmapオブジェクトを新規に作成し、その新しいBitmapオブジェクトに元の画像内容を描画して、「C:\picture_new.png」という名前の画像ファイルとして保存するコンソール・アプリケーションのサンプル・プログラムである。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。