/// <summary>
/// 创建缩略图
/// </summary>
/// <param name="srcFileName"></param>
/// <param name="destFileName"></param>
private static void CreateThumbnailImage(string srcFileName, string destFileName)
{
using (var img = new Bitmap(srcFileName))
{
Size originalSize = new Size(img.Width, img.Height);
Size targetSize = new Size(, );
targetSize = CalculateNewImageSize(originalSize, targetSize);
using (
var bitmap = new Bitmap(targetSize.Width, targetSize.Height, PixelFormat.Format32bppArgb))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.InterpolationMode = InterpolationMode.Low;
using (var wrapmode = new ImageAttributes())
{
wrapmode.SetWrapMode(WrapMode.TileFlipXY);
g.DrawImage(img, new Rectangle(, , targetSize.Width, targetSize.Height),
, ,
img.Width,
img.Height,
GraphicsUnit.Pixel,
wrapmode);
}
}
bitmap.Save(destFileName);
}
}
} /// <summary>
/// 计算缩略图的尺寸
/// </summary>
/// <param name="originalSize"></param>
/// <param name="targetSize"></param>
/// <returns></returns>
private static Size CalculateNewImageSize(Size originalSize, Size targetSize)
{
if (originalSize.Width <= targetSize.Width&&
originalSize.Height<=targetSize.Height)
{
//目标尺寸比原尺寸大,那么直接使用原尺寸
return originalSize;
} double targetRatio = GetRatio(targetSize);
double originalRatio = GetRatio(originalSize); var size = new Size(targetSize.Width, targetSize.Height); if (originalRatio < targetRatio)
{
size.Width = (originalSize.Width*targetSize.Height)/originalSize.Height;
}
else
{
size.Height = (originalSize.Height*targetSize.Width)/originalSize.Width;
} return size;
} private static double GetRatio(Size size)
{
return (double) size.Width/size.Height;
}

支持大文件的缩略图,800M的bmp图片缩放到300*300大概100kb左右

最新文章

  1. RESTORE DATABASE的standby选项
  2. [WP8.1UI控件编程]Windows Phone XAML页面的编译
  3. Java历史版本下载
  4. angular常见坑洞
  5. 织梦DedeCms网站更换域名后文章图片路径批量修改
  6. C#读取xlsx文件Excel2007
  7. c++结束进程的程序
  8. leetcode@ [131/132] Palindrome Partitioning &amp; Palindrome Partitioning II
  9. JavaScript要点 (一) 变量-作用域
  10. Javascript模块化编程:模块的写法
  11. 熟悉Git使用
  12. PAI里field module的on input和on request区别
  13. std::move()
  14. Matlab: 路径的操作
  15. Android BroadcastReceiver 接收收到短信的广播
  16. Ubuntu在终端执行命令时出现的错误
  17. python &amp; mysql 操作(compare_sum_fee)
  18. Spark读HBase写MySQL
  19. Centos 7 下监控与告警部署
  20. 别人的Linux私房菜(6)文件权限与目录配置

热门文章

  1. hadoop 根据secondary namenode恢复namenode
  2. log4j中怎样将信息写入到不同的日志文件
  3. DEV开发之控件XtraTabbedMdiManager
  4. 【leetcode刷题笔记】Triangle
  5. web前端框架之自定义form表单验证
  6. jquery中篇
  7. android 电池(三):android电池系统【转】
  8. /etc/init.d目录和/etc/rc.local脚本
  9. 2.微信小程序-B站:需要先知道这些
  10. JavaScript 使用技巧(持续更新)