【发布时间】:2010-03-24 13:10:35
【问题描述】:
我正在尝试编写一种方法,每次调用时将任何图像的大小减小 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: 根据您的 cmets,这是我找到的解决方案:
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;
}
【问题讨论】:
-
压缩?压缩位/像素不同。
-
发布你的 C# JPEG 导出代码。我也猜这是一个压缩问题。
-
哦,我刚刚添加了缺少的代码
标签: c# .net bitmap resize-image