ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-在WPF应用程序中将图像保存到文件并保持宽高比

2019-12-08 21:15:01  阅读:294  来源: 互联网

标签:c-4-0 wpf c net


嗨,我尝试缩放具有透明背景的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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有