JpegIO
jpeg ファイルを品質(quality)を指定してセーブする時に使用します
新しいビットマップを作成してセーブしているのは、
GDI+なんたらのエラーを回避するためです
プラットフォーム x64 でビルドした場合、品質が正しく設定されないことがあります。x86 での使用を推奨します
JpegIO.cs
using System.Drawing.Imaging;
namespace System.Drawing
{
public static class JpegIO
{
static ImageCodecInfo? GetEncoderInfo(string mineType)
{
ImageCodecInfo[] encs = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo enc in encs)
{
if (enc.MimeType == mineType)
{
return enc;
}
}
return null;
}
public const int quality_default = 85;
public static CustomError? Save(string path, Bitmap bitmap, int quality = quality_default)
{
var imagecodecinfo = GetEncoderInfo("image/jpeg");
if (imagecodecinfo == null)
{
return new CustomError("ImageCodecInfo の取得に失敗しました");
}
Bitmap? _bitmap = null;
try
{
var encoderparameters = new EncoderParameters(1);
encoderparameters.Param[0] = new EncoderParameter(Encoder.Quality, (long)quality);
_bitmap = new Bitmap(bitmap);
_bitmap.Save(path, imagecodecinfo, encoderparameters);
return null;
}
catch (Exception ex)
{
return new CustomException(ex);
}
finally
{
if (_bitmap != null)
{
_bitmap.Dispose();
}
}
}
}
}