C#WPF需要快速缩小包含文本

时间:2017-02-12 00:18:38

标签: c# wpf winforms

我需要缩小包含文本的多个图像。由于文本的原因,它们需要缩小,以保留文本的锋利边缘而不是平滑。我的第一次尝试如下:

RenderOptions.SetBitmapScalingMode(upgradeCard, BitmapScalingMode.HighQuality);
upgradeCard.Height(resizedHeight);
upgradeCard.Width(resizedWidth);

结果太模糊了,文字难以阅读。然而,这真的非常快。然后我尝试了这个:

public static class ImageResizer
{
    public static Image Resize(Image image, Size size)
    {
        if (image == null || size.IsEmpty)
            return null;

        var resizedImage = new Bitmap(size.Width, size.Height, image.PixelFormat);
        resizedImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

        using (var graphics = Graphics.FromImage(resizedImage))
        {
            var location = new Point(0, 0);
            graphics.CompositingMode = CompositingMode.SourceCopy;
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = SmoothingMode.None;
            graphics.DrawImage(image, new Rectangle(location, size),
                               new Rectangle(location, image.Size), GraphicsUnit.Pixel);
        }

        return resizedImage;
    }
}

这非常有效,几乎和Photoshop Bicubic Sharper一样好。不幸的是,它也很慢。我需要的方式太慢了。

有没有其他方法可以产生第二种方法的结果,但是相当快?

1 个答案:

答案 0 :(得分:0)

如果没有您的图片示例,很难提供可靠的建议。

例如,您的图片中已有多少对比度?你减少它们的因素是什么?

您可以尝试最近邻居缩放,这可能会非常快,然后尝试使用高斯滤波器或类似方法稍微模糊输出。如果这太混乱了,你也可以尝试使用柔和模糊进行线性缩放。