c#-在WPF应用程序中将图像保存到文件并保持宽高比
作者:互联网
嗨,我尝试缩放具有透明背景的png图像.我需要它是250×250像素.
水平和垂直居中,并保持正确的宽高比.设置边距的可能性.
这就是我到目前为止所得到的.
var img = new System.Windows.Controls.Image();
var bi = new BitmapImage(new Uri("C://tmp/original.png", UriKind.RelativeOrAbsolute));
img.Stretch = Stretch.Uniform;
img.Width = 250;
img.Height = 250;
img.Source = bi;
var pngBitmapEncoder = new PngBitmapEncoder();
var stream = new FileStream("C://tmp/test3.png", FileMode.Create);
pngBitmapEncoder.Frames.Add(BitmapFrame.Create(img));
pngBitmapEncoder.Save(stream);
stream.Close();
我知道它还没有使用Image对象,因此只保存图像而不缩放它.但是我在保存Image对象时遇到了麻烦.它给出了无法从’System.Windows.Controls.Image’转换为’System.Uri’的编译错误
希望可以有人帮帮我 :-)
编辑
将代码更新为带有编译错误的版本.刚刚改变
pngBitmapEncoder.Frames.Add(BitmapFrame.Create(bi));
至
pngBitmapEncoder.Frames.Add(BitmapFrame.Create(img));
这是我使用的清单
using System;
using System.Drawing;
using System.IO;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Image = System.Windows.Controls.Image;
解决方法:
您所做的类似于在图像上放大编辑器,并期望它在保存时反映在基础图像中.您需要做的是创建一个TransformedBitmap来修改图像,然后将其添加到框架中.
例如
var scale = new ScaleTransform(250 / bi.Width, 250 / bi.Height);
var tb = new TransformedBitmap(bi, scale);
pngBitmapEncoder.Frames.Add( BitmapFrame.Create(tb));
有关长宽比的更新.
I need it to be 250×250 pixel
如果源图像的高度和宽度比例不为1:1,则上面的缩放比例符合“我需要为250X250”,但会产生失真.
要解决此问题,您需要裁剪图像或缩放图像,以便仅一维为250像素.
要裁切图像,可以使用Clip Property或CroppedBitmap.要仅缩放一维,只需使用一个维来确定缩放比例,例如新的ScaleTransform(250 / bi.Width,250 / bi.width);
标签:c-4-0,wpf,c,net 来源: https://codeday.me/bug/20191208/2094425.html