我正在使用Graphics.DrawImage()
来调整ASP.NET应用程序中的图像大小。
除了gif。
之外,所有图像格式都可以正常使用这是我的原始图片:
当我调整为300px
时,它会返回:
我正在使用的代码是:
Dim postedFile as new Bitmap("flower.gif")
Dim bmpOut As System.Drawing.Bitmap
Dim Format As ImageFormat = postedFile.RawFormat
bmpOut = New Bitmap(width, height)
Dim g As Graphics = Graphics.FromImage(bmpOut)
g.InterpolationMode = InterpolationMode.High
g.DrawImage(postedFile, 0, 0, width, height)
postedFile.Dispose()
Return bmpOut
bmpOut.Dispose()
我也尝试使用所有可用的InterpolationMode
,包括InterpolationMode.HighQualityBicubic
,但图像质量仍然差。
为什么会发生这种情况,如何防止图像质量下降?
答案 0 :(得分:4)
问题不在于您发布的调整大小代码中。我使用您发布的大图像运行,结果看起来很棒。将新创建的每像素24位图像保存为新的gif时出现问题 - 为8bpp。你基本上有两个选择:
答案 1 :(得分:0)
如果您将已调整大小的图片保存为.gif,我认为没有理由在保存的.gif文件中发生这种情况。 .gif限制为256种颜色(除非完成了一些黑客攻击),并且在所有操作可能超过256次后重新调整大小的图像。此外,我不会惊讶地发现无论你做什么例行程序#39;重新使用将图像转换为.gif并不是非常关注质量。
答案 2 :(得分:0)
这不是插值,而是因为没有为目标图像设置ColorPalette。你必须量化。请参阅http://glennjones.net/2005/10/high-quality-dynamically-resized-images-with-dot-net/
上的示例