这几天开发一个程序,需要将一个图片旋转360度然后每一个角度保存下来。刚开始本来想着是让美工弄的,但是让一个美工手动转360度,她会喷你一脸。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
namespace 图片旋转程序
{
public class ImageHelper
{
/// <summary>
/// 以逆时针为方向对图像进行旋转
/// </summary>
/// <param name="b">位图流</param>
/// <param name="angle">旋转角度[0,360](前台给的)</param>
/// <returns></returns>
public Image RotateImg(Image b, int angle, string file)
{
angle = angle % ;
//弧度转换
double radian = angle * Math.PI / 180.0;
double cos = Math.Cos(radian);
double sin = Math.Sin(radian);
//原图的宽和高
int w = b.Width;
int h = b.Height;
int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin)));
int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos)));
//目标位图
Bitmap dsImage = new Bitmap(W, H);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//计算偏移量
Point Offset = new Point((W - w) / , (H - h) / );
//构造图像显示区域:让图像的中心与窗口的中心点一致
Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);
Point center = new Point(rect.X + rect.Width / , rect.Y + rect.Height / );
g.TranslateTransform(center.X, center.Y);
g.RotateTransform(angle);
//恢复图像在水平和垂直方向的平移
g.TranslateTransform(-center.X, -center.Y);
g.DrawImage(b, rect);
//重至绘图的所有变换
g.ResetTransform();
g.Save();
g.Dispose();
//保存旋转后的图片
dsImage.Save(@"D:\img\" + Path.GetFileNameWithoutExtension(file) + "\\" + angle + ".png", System.Drawing.Imaging.ImageFormat.Png);
return dsImage;
}
public Image RotateImg(string filename, int angle, string file)
{
return RotateImg(GetSourceImg(filename), angle, file);
}
public Image GetSourceImg(string filename)
{
Image img;
img = Bitmap.FromFile(filename);
return img;
}
}
class Program
{
static void Main(string[] args)
{
string[] strArr = Directory.GetFiles(@"D:\img");
foreach (string file in strArr)
{
Console.WriteLine(file); //输出E:\123\新建文本文件.txt
Console.WriteLine(Path.GetFileNameWithoutExtension(file));
//如果要保存的目录不存在,则先创建
if (!Directory.Exists(@"D:\img\" + Path.GetFileNameWithoutExtension(file)))
{
Directory.CreateDirectory(@"D:\img\" + Path.GetFileNameWithoutExtension(file));
}
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
Image img = Bitmap.FromStream(fs);
ImageHelper IH = new ImageHelper();
for (int i = ; i <= ; i++)
{
IH.RotateImg(img, i, file);
}
fs.Close();
}
Console.ReadKey();
}
}
}

C# 图片旋转360度程序的更多相关文章

  1. Winform中使用FastReport的PictureObject时通过代码设置图片源并使Image图片旋转90度

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  2. opencv图片旋转90度

    #include<iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv ...

  3. CSS使jsp图片旋转90度

    <style > img{ margin:100px auto 0; -moz-transform:rotate(-90deg); -webkit-transform:rotate(-90 ...

  4. transition过度效果 + transform旋转360度

    css样式: .animate{ width:65px; height:40px; background:#92B901; color:#ffffff; position:absolute; font ...

  5. css3实现头像旋转360度

    css样式: .div a img{ width: 88px; height: 88px; border-radius: 88px; transition: all 1.2s ease-out 0s; ...

  6. 关于android中调用系统拍照,返回图片是旋转90度

    转载博客:http://blog.csdn.net/walker02/article/details/8211628 项目开发中遇到的一个问题,对于三星手机在做手机照片选择时出现图片显示不正常,研究后 ...

  7. JQuery插件让图片旋转任意角度且代码极其简单

    引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度, 例如$("#rotate-image").r ...

  8. JQuery插件让图片旋转任意角度且代码极其简单 - 摘自网友

    JQuery插件让图片旋转任意角度且代码极其简单 2012-04-01 09:57:03     我来说两句      收藏    我要投稿 引入下方的jquery.rotate.js文件,然后通过$ ...

  9. iOS_UIImage_图片旋转

    一.目的: 有时候我们获得到的图片我们不是我们想要的方向,需要对图片进行旋转.比如:图片旋转90度180度等. 二.实现过程. 1.获取到该UIImage. 2.开启上下文. 3.上下文的具体操作. ...

随机推荐

  1. [JS]鼠标事件穿透的问题

    今天制作登陆窗口的效果时碰到的一个问题,如下: 标签结构如下: <div id="loginFrame"> <form class="loginFram ...

  2. PLSQL_Oracle外部表的概念和使用(案例)

    2014-08-25 Created By BaoXinjian

  3. suibi1117

    测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等. 我所了解的模块接口测试大体分为两类:模块接口测试和web接口测试 模块接口测试是单元测试的基础.它主要测试模块的调用 ...

  4. redis批量删除

    ./redis-cli -p 6379 -a password keys "*_icp" | xargs redis-cli -p 6379-a password del 删除所有 ...

  5. JAVA实例,求用户输入的整数是否是偶数

    题目:用户能输入一个整数,输入后返回是偶数还是奇数. 偶数规则:除以2能整除的数称之为偶数,否则是奇数 实例: switch版 import java.util.Scanner; public cla ...

  6. 客户端获取服务端自定义类数据 z

    客户端获取服务端自定义类数据 问题一:超时问题,在最后获取数据的时候突然提示服务超时,服务已断开 解决:配置文件添加: <bindings> <wsHttpBinding> & ...

  7. 下载文件的一种简单方法js

    我在做的一个项目有一部分要下载附件,可是我们公司用了一个包和网上的用response的解决方法冲突,而网上的js解决方法又用到了ActiveXObj我们经理不让用这个.还好我一个同事很利害用了一个很简 ...

  8. CRM 2016 自动保存 Save event arguments

    Save event arguments (client-side reference)   Applies To: Dynamics CRM 2016, Dynamics CRM Online In ...

  9. Eclipse自动补全功能和自动生成作者、日期注释等功能设置

    修改作者.日期注释格式:打开Windows->Preferences->Java->Code Style->Code Templates,点击右边窗口中的Comments,可以 ...

  10. ASP.NET MVC4 WebAPI若干要点

    本文仅仅是将一些可以运行无误的WebAPI示例的要点,记录下来,供自己查阅,也供刚刚学习WebAPI的读者参考之. 1.默认的API是不会过滤到action这个级别的,如果要过滤到这个级别,必须在路由 ...