|
.NET TIPS 画像をファイルに保存するには?デジタルアドバンテージ2003/04/25 |
![]() |
|
|
|
TIPS:画像を読み込むには?では、ファイルおよびWeb上から画像を読み込んだ。次のコードは、カレント・ディレクトリにあるmypicture.jpgファイルを読み込み、Bitmapオブジェクトを作成するためのものだ。
Bitmap bitmap = new Bitmap("mypicture.jpg");
Bitmapクラス(System.Drawing名前空間)には、そのビットマップ・イメージをファイルに保存する非常に便利なSaveメソッドも用意されている。Saveメソッドでは、次のような1文でBitmapオブジェクト内の画像を、パラメータで指定したファイルに保存できる。
bitmap.Save("mypicture2.jpg");
もちろん、開いた画像をそのまま保存するだけではまったく意味はない。次のサンプル・プログラムでは、画像を半分のサイズに縮小してから保存している。
|
|
| 画像のサイズを半分に縮小して保存するC#のサンプル・プログラム(resizebmp1.cs) | |
このサンプル・プログラムでは、Bitmapクラスの別バージョンのコンストラクタを使用している。このコンストラクタは、既存のビットマップ・イメージから、指定したサイズでBitmapオブジェクトを作成することができる。これによりビットマップ・イメージに拡大/縮小を施したBitmapオブジェクトのコピーができるわけだ。
こうして新しく作成したBitmapオブジェクトに対して、Saveメソッドよりファイルに保存している。
画像フォーマットを指定して保存
上記のサンプル・プログラムを実行すると、カレント・ディレクトリに画像サイズが半分のmypicture2.jpgが作成される。一見すると、正しく動作しているように思えるが、作成された画像ファイルは、実はJPEGフォーマットではなく、PNGフォーマットになってしまっていることに気付くはずだ。
リファレンス・マニュアルには明記されていないようだが、上記のようにプログラムで動的に作成されたBitmapオブジェクトに対して、ファイル名だけをパラメータで指定したSaveメソッドを呼び出すと、デフォルトでPNGフォーマットとして画像が保存されるようだ。また、画像ファイルの読み込み時と同様に、指定したファイル名の拡張子はまったく関係しない(拡張子が指定してあっても、その拡張子に対応する形式で保存されるわけではない)。
Saveメソッドには、パラメータで画像フォーマットが指定可能な、オーバーロードされた別バージョンが用意されている。このバージョンのSaveメソッドを使用すれば、例えば次のように保存するファイルをJPEGフォーマットとして指定することができる。
|
|
| 正しくJpegフォーマットで保存されるように修正したC#のサンプル・プログラム(resizebmp2.cs) | |
このサンプル・プログラムにあるように、画像フォーマットはImageFormatクラス(System.Drawing.Imaging名前空間)のstaticなプロパティで指定すればよい。
保存時に指定可能な画像フォーマット
ImageFormatクラスのプロパティには、一通りの画像フォーマットが定義されているが、実際にはそれらすべての形式で画像ファイルを作成できるわけではない。
TIPS:画像を読み込むには?では、画像ファイルの読み込み時にGDI+に組み込まれたデコーダが用いられることについて触れているが、同様の仕組みで、画像の保存時にはGDI+に組み込まれている「エンコーダ」が使用される。そちらで紹介しているサンプル・プログラム「enumdec.cs」の「Decoder」部分を「Encoder」に修正すれば、次のようにしてシステムにインストールされているエンコーダの一覧を列挙することができる。
|
|
| Saveメソッドで保存可能なフォーマットを列挙するC#のサンプル・プログラム(enumenc.cs) | |
リスト内にある出力例で列挙されたフォーマットが、Saveメソッドで実際に利用可能な画像フォーマットである。例えば、デコーダには用意されていたICONフォーマットは、ここには含まれていない。よって、Saveメソッドでパラメータとして“ImageFormat.Icon”を指定しても、エラーにはならないようだが、保存されるファイルはデフォルトのPNGフォーマットとなってしまう。![]()
| カテゴリ:クラス・ライブラリ 処理対象:ビットマップ 使用ライブラリ:Bitmapクラス(System.Drawing名前空間) 使用ライブラリ:ImageFormatクラス(System.Drawing.Imaging名前空間) 使用ライブラリ:ImageCodecInfoクラス(System.Drawing.Imaging名前空間) 関連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 -


