我需要缩小包含文本的多个图像。由于文本的原因,它们需要缩小,以保留文本的锋利边缘而不是平滑。我的第一次尝试如下:
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一样好。不幸的是,它也很慢。我需要的方式太慢了。
有没有其他方法可以产生第二种方法的结果,但是相当快?
答案 0 :(得分:0)
如果没有您的图片示例,很难提供可靠的建议。
例如,您的图片中已有多少对比度?你减少它们的因素是什么?
您可以尝试最近邻居缩放,这可能会非常快,然后尝试使用高斯滤波器或类似方法稍微模糊输出。如果这太混乱了,你也可以尝试使用柔和模糊进行线性缩放。