C# 圖片旋轉360度程序


這幾天開發一個程序,需要將一個圖片旋轉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 % 360;
            //弧度轉換  
            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) / 2, (H - h) / 2);
            //構造圖像顯示區域:讓圖像的中心與窗口的中心點一致  
            Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);
            Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
            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 = 1; i <= 360; i++)
                {
                    IH.RotateImg(img, i, file);
                }
                fs.Close();
            }
            Console.ReadKey();
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM