Идти здесь бонкеров, пытаясь сделать это в WPF (со всеми новыми инструментами для обработки изображений), но не может найти рабочего решения. До сих пор все решения привлекали их на экран или делали несколько сейвов, но мне нужно сделать это полностью в памяти.прочитайте jpg, измените размер, сохраните как png в приложении WPF C# или vb.net
В принципе, я хочу загрузить большой JPEG в память, изменить его размер (в памяти), сохранить в виде небольшого PNG-файла. Я могу загрузить файл jpeg в объект BitMap, отлично. после этого я в тупике.
Я нашел эту функцию, которая выглядит так, как будто это трюк, но для этого требуется ImageSource (к сожалению, я не могу найти способ преобразования моего объекта BitMap в памяти в ImageSource, который не дает исключения NULL.)
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);
}