我有一个 WPF 应用,该应用将缩略图图像另存为 png 。代码工作得很好,但是当我打开图像时,图像非常模糊。它捕获的图像来自画布本身。画布根据我加载的图像更改其宽度和高度。所需的缩略图大小将为 200 x 200 (像素)。
这是我的代码
public void CreateThumbail(Canvas canvas, string filename)
{
RenderTargetBitmap rtb = new RenderTargetBitmap(
(int)canvas.ActualWidth,
(int)canvas.ActualHeight,
96, //dip X
96, //dpi Y
PixelFormats.Pbgra32);
rtb.Render(canvas);
PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(CreateResizedImage(rtb, 200, 200, 0));
using (var filestream = System.IO.File.Create(filename))
{
pngImage.Save(filestream);
}
}
private static BitmapFrame CreateResizedImage(ImageSource source, int width, int height, int margin)
{
var rect = new Rect(margin, margin, width, height);
var group = new DrawingGroup();
RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.HighQuality);
group.Children.Add(new ImageDrawing(source, rect));
var drawingVisual = new DrawingVisual();
using (var drawingContext = drawingVisual.RenderOpen())
drawingContext.DrawDrawing(group);
var resizedImage = new RenderTargetBitmap(
(int)rect.Width, (int)rect.Height,// Resized dimensions
96, 96, // Default DPI values
PixelFormats.Pbgra32); // Default pixel format
resizedImage.Render(drawingVisual);
return BitmapFrame.Create(resizedImage);
}
在保存图像之前,我没有将其调整大小,因此图像看起来清晰锐利。但是当我保存缩略图时,它又丑又模糊。我究竟做错了什么?我是在过度设计吗?预先非常感谢。
答案 0 :(得分:2)
可能您需要考虑图像的原始尺寸。例如,尺寸为400x400的图像可以很好地缩小为200x200,而尺寸为235x235的图像则不会。
这不考虑开头不是正方形的图像。
您可以尝试反复降低图像的高度和宽度(我将减半),直到图像小于200x200,然后用白色或透明填充。
图像处理可能非常困难。我也不是专家,因此我可能会尝试在Google上找到这样的第三方库:https://imageprocessor.org/