编程语言
首页 > 编程语言> > c#-在WPF应用程序中将图像保存到文件并保持宽高比

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 PropertyCroppedBitmap.要仅缩放一维,只需使用一个维来确定缩放比例,例如新的ScaleTransform(250 / bi.Width,250 / bi.width);

标签:c-4-0,wpf,c,net
来源: https://codeday.me/bug/20191208/2094425.html