/**
* 无损缩放图片
* bitmap 需要缩放的图片
* w 需要缩放的宽度
* h 需要缩放的高度
* */
public static System.Drawing.Bitmap TBScaleBitmap(System.Drawing.Bitmap bitmap, int w, int h, string mode)
{
System.Drawing.Bitmap map = new System.Drawing.Bitmap(w, h);
System.Drawing.Graphics gra = System.Drawing.Graphics.FromImage(map);
gra.Clear(System.Drawing.Color.Transparent);//清空画布并以透明背景色填充
gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //使绘图质量最高,即消除锯齿
gra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gra.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
gra.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; int towidth = w;
int toheight = h; int x = ;
int y = ;
int ow = bitmap.Width;
int oh = bitmap.Height; switch (mode)
{
case "HW": //指定高宽缩放(可能变形)
break;
case "W": //指定宽,高按比例
toheight = bitmap.Height * w / bitmap.Width;
break;
case "H": //指定高,宽按比例
towidth = bitmap.Width * h / bitmap.Height;
break;
case "Cut": //指定高宽裁减(不变形)
if ((double)bitmap.Width / (double)bitmap.Height > (double)towidth / (double)toheight)
{
oh = bitmap.Height;
ow = bitmap.Height * towidth / toheight;
y = ;
x = (bitmap.Width - ow) / ;
}
else
{
ow = bitmap.Width;
oh = bitmap.Width * h / towidth;
x = ;
y = (bitmap.Height - oh) / ;
}
break;
case "MaxHW"://最大宽高比例缩放,比如原100*50->50*30,则结果是50*25
var rmaxhw_d1w = bitmap.Width * 1.0 / w;
var rmaxhw_d2h = bitmap.Height * 1.0 / h;
if (rmaxhw_d1w > rmaxhw_d2h)
{
if (rmaxhw_d1w <= )
{
towidth = bitmap.Width; h = bitmap.Height;
goto case "HW";
}
towidth = w;
goto case "W";
}
if (rmaxhw_d2h <= )
{
towidth = bitmap.Width; h = bitmap.Height;
goto case "HW";
}
toheight = h;
goto case "H";
default:
break;
} gra.DrawImage(bitmap, new System.Drawing.Rectangle(, , towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel); gra.Flush();
gra.Dispose();
bitmap.Dispose();
return map;
}

C# 同比缩放图片的更多相关文章

  1. Andorid-如何为你的Android应用缩放图片

    很难为你的应用程序得到正确的图像缩放吗?是你的图片过大,造成内存问题?还是图片不正确缩放造成不良用户体验的结果?为了寻求一个好的解决方案,我们咨询了Andreas Agvard(索尼爱立信软件部门), ...

  2. Android 等比例缩放图片

    // 缩放图片 public static Bitmap zoomImg(String img, int newWidth ,int newHeight){ // 图片源 Bitmap bm = Bi ...

  3. PHP按最大宽高等比例缩放图片类

    本来用phpthumb来缩略图片是十分方便的,但是最近在sae上写项目发现phpthumb在sae上保存文件时会出问题,想来实现一个简单的按最大宽高等比例缩放图片类也并不困难,于是便自己写了一个方便修 ...

  4. IOS 缩放图片常用方法

    /** * 指定Size压缩图片 (图片会压缩变形) * * @param image 原图 * @param size 压缩size * * @return 压缩后的图片 */ -(UIImage* ...

  5. Android拖动和缩放图片

    Android拖动和缩放图片 2014年5月9日 我们在使用应用其中常常须要浏览图片.比方在微信其中.点击图片之后能够对图片进行缩放. 本博客介绍怎样对图片进行拖拽和缩放.这首先要了解Android中 ...

  6. JavaScript等比例缩放图片

    js等比例缩放图片,这个功能非常实用,当网页加载一个尺寸比较大的图片时,往往会把一个网页撑的变形,页面变得很难看,于是我们就想到了用JS去控制超出一定范围的图片,以稳定页面布局,本代码段就是完成了此功 ...

  7. JS实现等比例缩放图片

    JS实现等比例缩放图片 2014-01-19 21:57 by 龙恩0707, 40 阅读, 0 评论, 收藏, 编辑 JS实现等比例缩放图片 有时候我们前端页面只有500×500像素的宽和高的布局, ...

  8. php 上传缩放图片

    有时上传图片时因为图片太大了,不仅占用空间,消耗流量,而且影响浏(图片的尺寸大小不一).下面分享一种等比例不失真缩放图片的方法,这样,不管上传的图片尺有多大,都会自动压缩到我们设置尺寸值的范围之内.经 ...

  9. 【转】java缩放图片、java裁剪图片代码工具类

    一首先看下效果 二工具类 三测试类 在系统的上传图片功能中,我们无法控制用户上传图片的大小,用户可能会上传大到几十M小到1k的的图片,一方面图片太大占据了太多的空间,另一方面,我们没办法在页面上显示统 ...

随机推荐

  1. quartz的配置文件说明

    # Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if ...

  2. sh_01_重复执行

    sh_01_重复执行 # 打印 500 遍 Hello Python(复制粘贴的方法,手动复制500次) print("Hello Python") print("Hel ...

  3. session与cookie区别与联系

    一.Session的概念 Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标 ...

  4. java实验报告&第三周学习总结

    实验报告: 实验1:求水仙花数在C语言中求水仙花数是一个复杂且长的代码,在java中可以通过简单的代码来实现操作,找出水仙花数: 图例如下: 试验2:求13+23-33+43-53.........9 ...

  5. leetcode-mid-dynamic programming-62. Unique Paths

    mycode   time limited class Solution(object): def uniquePaths(self, m, n): """ :type ...

  6. vim字体设置

    经过多方试验,在win下设置vim的大小终于成功了,备份如下, 现在把gvim7.1更改字体的方法记录如下,一段时间后,可能会失效,对他人造成困扰吧?!^_^   在_vimrc中写:set guif ...

  7. 实体类的[Serializable]标签造成WebAPI Post接收不到值

    WebAPI: [HttpPost] public HttpResponseMessage test([FromBody]List<Class1> list) { return Commo ...

  8. 基于 @Scheduled 注解的 ----定时任务

    最常用的方法@Scheduled 注解表示起开定时任务 依赖 <dependencies> <dependency> <groupId>org.springfram ...

  9. vue组件事件(极客时间Vue视频笔记)

    vue组件核心:事件 <body> <div class="app"> <todo-list></todo-list> {{mess ...

  10. Python实现批量执行华为交换机脚本

    #!/usr/bin/python3 # -*- coding:utf-8 -*- import paramiko import time ssh = paramiko.SSHClient() key ...