C# 中的图像调整大小 - 确定调整尺寸(高度和宽度)的算法

2023-11-22

我需要缩小高度或宽度大于预定义像素值的图像。

我编写了一些代码来查看原始图像,检查宽度、高度或高度和宽度是否大于最大宽度/最大高度设置。

我现在需要根据后一个值的最大值找出要调整大小的尺寸。

例如:如果图像是900h x 300w最大高度是700h我需要调整高度700和宽度????

创建和保存图像文件很简单,超出了本文的范围:

// First I get the max height and width allowed:

int resizeMaxHeight =  int.Parse(Utility.GetConfigValue("ResizeMaxHeight")); // in config: 700px
int resizeMaxWidth =  int.Parse(Utility.GetConfigValue("ResizeMaxWidth"));  //  in config: 500px

// Save original: 
try
{
    filebase.SaveAs(savedFileName);
}
catch (System.IO.DirectoryNotFoundException ex)
{
    Logger.Instance.LogException(ex, 0, "FileTransfer");
}

// Determin original dimensions:
Image image = System.Drawing.Image.FromFile(Server.MapPath(savedFileName));

int resizeHeight, resizeWidth;
bool doResize = true;

// both height and width are greater than the allowed height and width:
if (image.Width > resizeMaxWidth && image.Height > resizeMaxHeight)
{
    if (image.Height > image.Width) 
        resizeHeight = resizeMaxHeight;
    else
        resizeWidth = resizeMaxWidth;
}
else if (image.Width > resizeMaxWidth)
{
    // width is too great, but height is ok
    resizeWidth = resizeMaxWidth;
}
else if (image.Height > resizeMaxHeight)
{
    // height is too great, but width is ok
    resizeHeight = resizeMaxHeight;
}
else
{
    // image is ok size, don't resize:
    doResize = false;
}

创建缩略图: 这就是我现在正在做的事情......不完整:

if (doResize)
{
    ImageUtilities.ResizeImage(image, resizeWidth, resizeHeight);
}

如果图像高度大于图像宽度,Nathaniel 发布的解决方案实际上会失败。以下示例产生正确的结果:

private Size ResizeFit(Size originalSize, Size maxSize)
{
    var widthRatio = (double)maxSize.Width / (double)originalSize.Width;
    var heightRatio = (double) maxSize.Height/(double) originalSize.Height;
    var minAspectRatio = Math.Min(widthRatio, heightRatio);
    if (minAspectRatio > 1)
        return originalSize;
    return new Size((int)(originalSize.Width*minAspectRatio), (int)(originalSize.Height*minAspectRatio));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的图像调整大小 - 确定调整尺寸(高度和宽度)的算法 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • Flutter:http get 请求不适用于 apk 发布

    关于我的问题有几个类似的问题 但所有这些问题中给出的解决方案都不适合我 所以我尝试用我的问题的详细信息打开另一个问题 我希望有人能帮助我 Context 我正在学习 flutter 和 dart 作为初学者 我想实现一个使用 CRUD 操作
  • 条形图图例上的框架边框可以删除吗?

    我正在 Mathematica 中创建用于各种绘图 图表绘制的应用程序 最终它将有一个 GUI 但第一步是获得正确的代码 并且足够简单以便 GUI 可以管理 我很难将图例设置为没有框架 这是一个最小的例子 有一些选项BarChart已经定制
  • Android将CID位置转换为坐标

    我构建了一个 Android 应用程序 它可以处理来自 Google 地图的共享意图并显示它的坐标 问题是他们发送了一个短网址 我用 Google 的 url Shortner api 进行解码 在某些情况下 结果长链接是这种类型的 谁能帮
  • “指向未初始化的字节”Valgrind 错误

    我一直在使用Valgrind在我的代码中查找内存泄漏 虽然没有发现内存泄漏 但报告了一些错误 所有这些错误都源自单个函数 类方法 17043 ERROR SUMMARY 10100 errors from 3 contexts suppre
  • 让 Github 在收到更新时推送到远程服务器

    让 Github 自动将任何更新推送到远程服务器的设置是什么 这对于维护 Github 上的代码库以及让网站运行该代码库非常有用 我的存储库位于我自己的计算机上 这就是我工作的地方 我将更改提交到本地存储库 并将它们推送到我的 Github
  • 什么是堆中的类型对象

    我知道当在堆中创建对象时 它们还有额外的两个字段 同步块索引 类型对象指针 所以我想知道Type Object是什么时候在Heap内存中创建的以及它保存什么样的数据 它只代表Type的元数据 我还没有找到更多关于这方面的细节 Type 对象
  • ASP MVC3 在actionlink中插入html标签

    我是 ASP MVC3 的新手 我正在使用 Razor 引擎 我的问题是我已经以表单构建了主导航
  • 如何获得行排名?

    HI 我昨天实际上发布了类似 或相同 的问题 但我认为我需要发布一个新问题 因为我有简短但明确的问题 我有下表 id point 1 30 2 30 3 29 4 27 5 28 6 26 我想要的是 获取所有用户按排名排序 用户 1 和
  • 多个 OpenGL 视图 (Cocos2D)

    Note 任何可以帮助我正确解决这个问题的人都会得到100点赏金 在我的应用程序中 我将 UIKit 与 Cocos2D 混合在一起 我使用 addSubview 和 removeFromSuperview 调用做了一些简单的自定义视图动画
  • 在 scalatest 中用什么代替符号?

    在 scalatest 中 您应该能够使用如下符号测试布尔属性 iter shouldBe traversableAgain 但这种表示法在最新版本的 scala 中已被弃用 所以现在你应该这样写 iter shouldBe Symbol
  • 对硬盘中的大量整数进行排序

    给定硬盘上 100 GB 整数数据 RAM 为 2 GB 如何以最少的磁盘操作对整数进行排序 这里从磁盘获取一个数字被视为一次磁盘操作 尽管实际上可以获取一块数据 我们可以使用磁盘上的额外空间进行临时存储 而不需要考虑清理已使用的临时空间的
  • Hibernate 显示真实的 SQL [重复]

    这个问题在这里已经有答案了 if I set
  • 如何配置 MVC6 应用程序以在 IIS 上运行?

    因此 我正在 Visual Studio 2015 中构建一个 MVC6 应用程序 并已设法解决大部分问题 但是 我尚未解决部署问题 在 MVC4 我之前使用的 中 我们的流程 发布到一个文件夹 然后在 IIS 中设置网站 右键单击Site
  • 在 python 中模拟传值行为

    我想模拟 python 中的按值传递行为 换句话说 我想绝对确保我编写的函数不会修改用户提供的数据 一种可能的方法是使用深复制 from copy import deepcopy def f data data deepcopy data
  • 线性布局和相对布局有什么区别?

    线性布局和相对布局有什么区别 LINEAR LAYOUT 在线性布局中 顾名思义 所有元素都是 以线性方式显示 水平或垂直 此行为设置为 android orientation 这是节点的一个属性 线性布局 线性布局将每个子元素一个接一个地
  • 如何在Python中使用react.js和Selenium从网页中抓取数据?

    我在抓取使用的网站时遇到一些困难react js并且不知道为什么会发生这种情况 This is the html of the website 我想做的是点击带有class play pause button btn btn naked 但
  • Wordpress 中的永久链接 - 找不到页面

    我已经搜索了几个小时 但没有找到任何似乎能够解决这个问题的东西 这是场景 我正在制作一个基于 二十一 主题的wp主题 一切都很顺利 直到我决定将网址更改为永久链接 唯一显示的页面是我之前定义的静态页面 我已经设置了 htaccess 文件
  • 关于 chomp 的澄清

    我现在正在放课 决定花时间学习 Perl 我正在使用 Beginning Perl http www perl org books beginning perl 我正在完成第三章末尾的练习 其中一项练习要求我 将重要的电话号码存储在哈希中
  • 如何使用 FontForge 从字体中删除连字

    我的字体有一些连字错误 这导致了问题我的安卓应用程序 我只想删除连字 我该如何在 FontForge 中做到这一点 这个问题是相关的 但它是相反的 Fontforge 脚本如何为字形添加连字 In 字体锻造 go to 元素 gt 字体信息
  • C# 中的图像调整大小 - 确定调整尺寸(高度和宽度)的算法

    我需要缩小高度或宽度大于预定义像素值的图像 我编写了一些代码来查看原始图像 检查宽度 高度或高度和宽度是否大于最大宽度 最大高度设置 我现在需要根据后一个值的最大值找出要调整大小的尺寸 例如 如果图像是900h x 300w最大高度是700