|
.NET TIPS 画像のdpi(画像解像度)を取得/設定するには?[C#、VB]デジタルアドバンテージ 一色 政彦2009/12/24 |
![]() |
|
|
|
.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」という名前の画像ファイルとして保存するコンソール・アプリケーションのサンプル・プログラムである。
|
||
| 画像解像度を取得/設定するサンプル | ||
| このサンプル・アプリケーションを実行するには、System.Drawingアセンブリへの参照の追加が必要である。 保存するファイル名を決定する処理で使われているPath.GetDirectoryNameメソッドについては「TIPS:パス文字列からディレクトリ・パス部分を取り出すには?」を参照。Path.GetFileNameWithoutExtensionメソッドやPath.GetExtensionメソッドは「TIPS:パス名やファイル名からベース名と拡張子を取得するには?」を参照してほしい。「96.0f」や「96.0F」の最後にあるサフィックス「f」「F」の意味については「TIPS:数値のデータ型を明示的に指定するには?」を参照してほしい。 |
このサンプルをすぐに試せるように、300dpiに設定された画像ファイルを用意した。こちらからダウンロードできる(例えばこの画像をWordにドラッグ&ドロップで貼り付けると、画像ファイルをダブルクリックしたときの画像プレビュー表示のサイズよりも、小さく表示されてしまう。ちなみにWordドキュメント印刷時の画像サイズは、画像オブジェクトの右クリック・メニューから[サイズ]を選択すると表示される[サイズ]ダイアログの[サイズと角度]で確認できる。同ダイアログの[原型のサイズ]の値はdpiが反映されている)。![]()
| カテゴリ:クラス・ライブラリ 処理対象:ビットマップ 使用ライブラリ:Imageクラス(System.Drawing名前空間) 使用ライブラリ:Bitmapクラス(System.Drawing名前空間) 関連TIPS:画像をファイルに保存するには? 関連TIPS:パス文字列からディレクトリ・パス部分を取り出すには? 関連TIPS:パス名やファイル名からベース名と拡張子を取得するには? 関連TIPS:数値のデータ型を明示的に指定するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



