品質を指定して画像を保存する先に「画像フォーマットを指定して保存する」方法を紹介しましたが、ここではさらにイメージ エンコーダを指定して画像を保存する方法を紹介します。次に紹介するコードは、画像ファイルを指定された品質(Quality)によりJPEG形式で保存するメソッドです(MSDN「Encoder.Quality フィールド」のコードを参考にしています)。 使い方としては、画像ファイル"test.bmp"を品質25でJpegに保存する時は、 [VB.NET] Public Shared Sub SaveImage(ByVal fileName As String, _ ByVal quality As Integer) '画像ファイルを読み込む Dim bmp As Bitmap = New Bitmap(fileName) 'EncoderParameterオブジェクトを1つ格納できる 'EncoderParametersクラスの新しいインスタンスを初期化 'ここでは品質のみ指定するため1つだけ用意する Dim eps As New System.Drawing.Imaging.EncoderParameters(1) '品質を指定 Dim ep As New System.Drawing.Imaging.EncoderParameter( _ System.Drawing.Imaging.Encoder.Quality,quality) 'EncoderParametersにセットする eps.Param(0) = ep 'イメージエンコーダに関する情報を取得する Dim ici As System.Drawing.Imaging.ImageCodecInfo ici = GetEncoderInfo("image/jpeg") '新しいファイルの拡張子を取得する Dim ext As String = ici.FilenameExtension.Split(";"c)(0) ext = System.IO.Path.GetExtension(ext).ToLower() '保存するファイル名を決定(拡張子を変える) Dim saveName As String = System.IO.Path.ChangeExtension(fileName, ext) '保存する bmp.Save(saveName, ici, eps) End Sub 'MimeTypeで指定されたImageCodecInfoを探して返す Private Shared Function GetEncoderInfo(ByVal mineType As String) _ As System.Drawing.Imaging.ImageCodecInfo 'GDI+ に組み込まれたイメージ エンコーダに関する情報をすべて取得 Dim encs() As System.Drawing.Imaging.ImageCodecInfo = _ System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders() '指定されたMimeTypeを探して見つかれば返す Dim enc As System.Drawing.Imaging.ImageCodecInfo For Each enc In encs If enc.MimeType = mineType Then Return enc End If Next Return Nothing End Function [C#] /// <summary> /// 指定されたファイルを品質を指定してJPEGで保存する /// </summary> /// <param name="fileName">画像ファイル名</param> /// <param name="quality">品質</param> public static void SaveImage(string fileName, int quality) { //画像ファイルを読み込む Bitmap bmp= new Bitmap(fileName); //EncoderParameterオブジェクトを1つ格納できる //EncoderParametersクラスの新しいインスタンスを初期化 //ここでは品質のみ指定するため1つだけ用意する System.Drawing.Imaging.EncoderParameters eps = new System.Drawing.Imaging.EncoderParameters(1); //品質を指定 System.Drawing.Imaging.EncoderParameter ep = new System.Drawing.Imaging.EncoderParameter( System.Drawing.Imaging.Encoder.Quality, quality); //EncoderParametersにセットする eps.Param[0] = ep; //イメージエンコーダに関する情報を取得する System.Drawing.Imaging.ImageCodecInfo ici; ici = GetEncoderInfo("image/jpeg"); //新しいファイルの拡張子を取得する string ext = ici.FilenameExtension.Split(';')[0]; ext = System.IO.Path.GetExtension(ext).ToLower(); //保存するファイル名を決定(拡張子を変える) string saveName= System.IO.Path.ChangeExtension(fileName, ext); //保存する bmp.Save(saveName, ici, eps); } //MimeTypeで指定されたImageCodecInfoを探して返す private static System.Drawing.Imaging.ImageCodecInfo GetEncoderInfo(string mineType) { //GDI+ に組み込まれたイメージ エンコーダに関する情報をすべて取得 System.Drawing.Imaging.ImageCodecInfo [] encs= System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(); //指定されたMimeTypeを探して見つかれば返す foreach (System.Drawing.Imaging.ImageCodecInfo enc in encs) if (enc.MimeType == mineType) return enc; return null; } 上記のコードのイメージエンコーダ(「System.Drawing.Imaging.Encoder.Quality」の部分)を変えることによって、色深度、圧縮、輝度なども指定可能です。イメージ エンコーダについて詳しくはEncoder クラスをご覧ください。 |
|
Copyright 2002-2008 DOBON!. All rights reserved.
|