gpt4 book ai didi

c# - 将图像保存到文件中,在 WPF 应用程序中保持纵横比

转载 作者:行者123 更新时间:2023-11-30 16:31:46 25 4
gpt4 key购买 nike

您好,我正在尝试缩放具有透明背景的 png 图像。我需要它为 250x250 像素。

水平和垂直居中并保持正确的纵横比。设置边距的可能性。

这是我到目前为止得到的。

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;

最佳答案

您所做的类似于在图像上放大编辑器并期望它在您保存时反射(reflect)在底层图像中。您需要做的是创建一个 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 250x250 pixel

如果源图像的高度和宽度比例不是 1:1,则上面的缩放比例符合“我需要它是 250X250”的要求,但会产生失真。

要解决此问题,您需要裁剪图像或缩放图像,以便只有一个维度为 250 像素。

要裁剪图像,您可以使用 Clip PropertyCroppedBitmap .要仅缩放一个维度,您只需使用一个维度来确定比例,例如new ScaleTransform(250/bi.Width, 250/bi.width);

关于c# - 将图像保存到文件中,在 WPF 应用程序中保持纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4648456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com