在这里疯狂尝试在 WPF 中执行此操作(使用所有新的图像处理工具),但似乎找不到有效的解决方案。到目前为止,所有解决方案都是在屏幕上绘制它们或进行多次保存,但我需要完全在内存中执行此操作。
基本上,我想将一个大的 jpeg 加载到内存中,将它的大小调整为更小(在内存中),保存为一个小的 PNG 文件。我可以将 jpeg 文件加载到 BitMap 对象中,很好。在那之后,我很难过。
我发现这个函数看起来可以解决问题,但它需要一个 ImageSource(不幸的是,我找不到将内存中的 BitMap 对象转换为不会产生 NULL 异常的 ImageSource 的方法。)
private static BitmapFrame CreateResizedImage(ImageSource source, int width, int height, int margin)
{
dynamic rect = new Rect(margin, margin, width - margin * 2, height - margin * 2);
dynamic @group = new DrawingGroup();
RenderOptions.SetBitmapScalingMode(@group, BitmapScalingMode.HighQuality);
@group.Children.Add(new ImageDrawing(source, rect));
dynamic drawingVisual = new DrawingVisual();
using (drawingContext == drawingVisual.RenderOpen())
{
drawingContext.DrawDrawing(@group);
}
// Resized dimensions
// Default DPI values
dynamic resizedImage = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
// Default pixel format
resizedImage.Render(drawingVisual);
return BitmapFrame.Create(resizedImage);
}