/// <summary>
/// 按指定宽高缩放图片
/// </summary>
/// <param name="image">原图片</param>
/// <param name="dstWidth">目标图片宽</param>
/// <param name="dstHeight">目标图片高</param>
/// <returns></returns>
public Image ScaleImage(Image image, int dstWidth, int dstHeight)
{
Graphics g = null;
try
{
//按比例缩放
float scaleRate = GetWidthAndHeight(image.Width, image.Height, dstWidth, dstHeight);
int width = (int)(image.Width * scaleRate);
int height = (int)(image.Height * scaleRate); Bitmap destBitmap = new Bitmap(width, height);
g = Graphics.FromImage(destBitmap);
g.Clear(Color.Transparent); //设置画布的描绘质量
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); return destBitmap;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
finally
{
if (g != null)
{
g.Dispose();
} if (image != null)
{
image.Dispose();
}
}
} /// <summary>
/// 获取图片缩放比例
/// </summary>
/// <param name="oldWidth">原图片宽</param>
/// <param name="oldHeigt">原图片高</param>
/// <param name="newWidth">目标图片宽</param>
/// <param name="newHeight">目标图片高</param>
/// <returns></returns>
public float GetWidthAndHeight(int oldWidth, int oldHeigt, int newWidth, int newHeight)
{
//按比例缩放
float scaleRate;
if (oldWidth >= newWidth && oldHeigt >= newHeight)
{
int widthDis = oldWidth - newWidth;
int heightDis = oldHeigt - newHeight;
if (widthDis > heightDis)
{
scaleRate = newWidth * 1f / oldWidth;
}
else
{
scaleRate = newHeight * 1f / oldHeigt;
}
}
else if (oldWidth >= newWidth)
{
scaleRate = newWidth * 1f / oldWidth;
}
else if (oldHeigt >= newHeight)
{
scaleRate = newHeight * 1f / oldHeigt;
}
else
{
int widthDis = newWidth - oldWidth;
int heightDis = newHeight - oldHeigt;
if (widthDis > heightDis)
{
scaleRate = newHeight * 1f / oldHeigt;
}
else
{
scaleRate = newWidth * 1f / oldWidth;
}
}
return scaleRate;
}

C# 按指定宽高缩放图片的更多相关文章

  1. Android大图片之缩略图,以及对原图依照指定宽高裁剪成缩略图

     <Android大图片之变换缩略图,以及对原始大图片依照指定宽.高裁剪成缩略图> 在Android的ImageView载入图像资源过程中,出于性能和内存开销的须要.有时候须要把一个原 ...

  2. php 图片上传的公共方法(按图片宽高缩放或原图)

    写的用于图片上传的公共方法类调用方法: $upload_name='pic';$type = 'logo_val';$file_name = 'logo_' . $user_id .create_st ...

  3. ThinkPHP 5 文件上传及指定宽高生成缩略图公共方法

    这个是非常常用的案例,ThinkPHP 5 文件上传及指定宽高生成缩略图公共方法/** * 单文件上传 * name:表单上传文件的名字 * ext: 文件允许的后缀,字符串形式 * path:文件保 ...

  4. Matrix: 利用Matrix来设置ImageView的宽高,使图片能正常显示

    在Android中加载ImageView一般都不会给ImageView的宽高设置一个确切的值,一般都是直接写成: <ImageView android:id="@+id/iv_test ...

  5. 头像修改功能 包含ios旋转图片 但是旋转后没遮罩, 正常图片可以显示遮罩 宽高不规则图片没做控制 遮罩框可以拖动

    https://blog.csdn.net/wk767113154/article/details/77989544  参考资料 <template> <div id="p ...

  6. js 获取图片宽高 和 图片大小

    获取要查看大小的img var img_url = 'http://img5.imgtn.bdimg.com/it/u=4267222417,1017407570&fm=200&gp= ...

  7. excel表格添加固定宽高的图片

    import xlsxwriter,xlrd import glob #打开excel文件 data=xlrd.open_workbook('优秀创意库-20180725.xlsx') #获取第一张工 ...

  8. JS实现图片宽高的等比缩放

    关于图片宽高的等比缩放,其实需求就是让图片自适应父容器的宽高,并且是等比缩放图片,使图片不变形. 例如,需要实现如下的效果: 要实现上面的效果,需要知道图片的宽高,父容器的宽高,然后计算缩放后的宽高. ...

  9. java高质量缩放图片

    可按照比例缩放,也可以指定宽高 import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg.JP ...

  10. table-cell实现未知宽高图片,文本水平垂直居中在div

    <BODY> <h1>未知宽高的图片水平垂直居中在div</h1> <!--box-outer--> <div class="box-o ...

随机推荐

  1. NC15128 老子的全排列呢

    题目链接 题目 题目描述 老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么? 输入描述 ...

  2. S905L3A(M401A)拆解, 运行EmuELEC和Armbian

    关于S905L3A / S905L3AB S905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3 ...

  3. numpy数组初始化方法总结

    1 使用list初始化 a=np.array([[1,2,3],[4,5,6]],dtype='float32') #a=[[1. 2. 3.],[4. 5. 6.]] 2 赋值与复制 (1)赋值 a ...

  4. Python中 r'', b'', u'', f'' 的含义

    python中 r'', b'', u'', f'' 的含义   r/R:非转义的原始字符串 与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的 ...

  5. Go语言并发编程(2):channel 通道介绍和使用

    一.简介 channel 不仅可以用于 goroutine 间进行安全通信,还可以用于同步内存访问. 而且 Go 社区强烈推荐使用 channel 通道实现 goroutine 之间的通信, 不要通过 ...

  6. [BUUCTF][WEB][极客大挑战 2019]BabySQL 1

    靶机打开url 界面上显示,它做了更严格的过滤.看来后台是加了什么过滤逻辑 老规矩先尝试时候有sql注入的可能,密码框输入 123' 爆出sql错误信息,说明有注入点 构造万能密码注入 123' or ...

  7. 【Azure Redis 缓存】Redis的监控方式? 是否有API接口调用来获取监控值

    问题描述 对于PaaS的Azure Cache for Redis,Azure中有哪些监控方式?是否能有api接口调用来获取监控值? 问题答案 1) 在Redis的门户中,使用Metrics查看Red ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (206)-- 算法导论15.4 3题

    三.设计 LCS-LENGTH的带备忘的版本,运行时间为O(mn).需要写代码的时候,请用go语言. 文心一言,代码正常运行: LCS-LENGTH(Longest Common Subsequenc ...

  9. [JS] 获取超星视频题答案

    // 解除鼠标限制 var btnn = $(document.getElementById("iframe").contentWindow.document.getElement ...

  10. Java 异常处理(1) : try-catch- finally中finally的使用

    1 package com.bytezero.throwable; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 impor ...