呼び出されるたびに画像のサイズを 50% 縮小するメソッドを作成しようとしていますが、問題が見つかりました。画像が実際には半分になっているのに、ファイルサイズが大きくなってしまうことがあります。DPI と PixelFormat を担当しています。他に何が欠けていますか?
お時間をいただきありがとうございます。
public Bitmap ResizeBitmap(Bitmap origBitmap, int nWidth, int nHeight)
{
Bitmap newBitmap = new Bitmap(nWidth, nHeight, origBitmap.PixelFormat);
newBitmap.SetResolution(
origBitmap.HorizontalResolution,
origBitmap.VerticalResolution);
using (Graphics g = Graphics.FromImage((Image)newBitmap))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(origBitmap, 0, 0, nWidth, nHeight);
}
return newBitmap;
}
編集: 不足しているコードは次のとおりです。
int width = (int)(bitmap.Width * 0.5f);
int height = (int)(bitmap.Height * 0.5f);
Bitmap resizedBitmap = ResizeBitmap(bitmap, width, height);
resizedBitmap.Save(newFilename);
編集2: あなたのコメントに基づいて、これが私が見つけた解決策です:
private void saveAsJPEG(string savingPath, Bitmap bitmap, long quality)
{
EncoderParameter parameter = new EncoderParameter(Encoder.Compression, quality);
ImageCodecInfo encoder = getEncoder(ImageFormat.Jpeg);
if (encoder != null)
{
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = parameter;
bitmap.Save(savingPath, encoder, encoderParams);
}
}
private ImageCodecInfo getEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
if (codec.FormatID == format.Guid)
return codec;
return null;
}