C# 图像质量不好

C# 图像质量不好,c#,.net,gdi+,C#,.net,Gdi+,问题: Image ResizeImage(Image original, int targetWidth) { double percent = (double)original.Width / targetWidth; int destWidth = (int)(original.Width / percent); int destHeight = (int)(original.Height / percent); Bitmap b = new Bitmap

问题:

Image ResizeImage(Image original, int targetWidth)
{
    double percent = (double)original.Width / targetWidth;
    int destWidth = (int)(original.Width / percent);
    int destHeight = (int)(original.Height / percent);

    Bitmap b = new Bitmap(destWidth, destHeight);
    Graphics g = Graphics.FromImage((Image)b);
    try
    {

        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.CompositingQuality = CompositingQuality.HighQuality;

        g.DrawImage(original, 0, 0, destWidth, destHeight);
    }
    finally
    {
        g.Dispose();
    }

    return (Image)b;
}
几天前我在这里找到了这个函数,但是我再也找不到了。它调整图像大小,但输出质量不好。看起来颜色深度是8位

第一张照片是原始照片,第二张照片是经过Photoshop处理的,最后一张照片的大小由代码调整:

样本:

Image ResizeImage(Image original, int targetWidth)
{
    double percent = (double)original.Width / targetWidth;
    int destWidth = (int)(original.Width / percent);
    int destHeight = (int)(original.Height / percent);

    Bitmap b = new Bitmap(destWidth, destHeight);
    Graphics g = Graphics.FromImage((Image)b);
    try
    {

        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.CompositingQuality = CompositingQuality.HighQuality;

        g.DrawImage(original, 0, 0, destWidth, destHeight);
    }
    finally
    {
        g.Dispose();
    }

    return (Image)b;
}

功能:

Image ResizeImage(Image original, int targetWidth)
{
    double percent = (double)original.Width / targetWidth;
    int destWidth = (int)(original.Width / percent);
    int destHeight = (int)(original.Height / percent);

    Bitmap b = new Bitmap(destWidth, destHeight);
    Graphics g = Graphics.FromImage((Image)b);
    try
    {

        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.CompositingQuality = CompositingQuality.HighQuality;

        g.DrawImage(original, 0, 0, destWidth, destHeight);
    }
    finally
    {
        g.Dispose();
    }

    return (Image)b;
}

看起来像是在某个阶段将图像转换为索引颜色像素格式。检查并尝试明确设置
像素格式
分辨率
属性。

也许这个问题及其答案对您有帮助。您不应该从原始的
创建
图形
对象吗<代码>图形g=图形.FromImage(原始)
位图b=新位图(destWidth,destHeight,System.Drawing.Imaging.PixelFormat.Format24bppRgb);会有帮助吗?我试试。。。