gpt4 book ai didi

c# - 有时,缩小位图会生成更大的文件。为什么?

转载 作者:太空狗 更新时间:2023-10-29 22:11:28 24 4
gpt4 key购买 nike

我正在尝试编写一种每次调用时将任何图像的大小减小 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;
}

http://imgur.com/lY9BN.png

http://imgur.com/KSka0.png

编辑:这是缺少的代码:

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;
}

最佳答案

您很可能以低压缩率(高质量)保存 jpeg 图像。

关于c# - 有时,缩小位图会生成更大的文件。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com