码迷,mamicode.com
首页 > Windows程序 > 详细

C# - 图片旋转和Base64处理

时间:2017-12-29 15:27:19      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:using   换行符   bool   isp   lap   fse   jpg   tail   传递   

旋转

(1)按角度旋转

    /// <summary>  
    /// 根据角度旋转图标  
    /// </summary>  
    /// <param name="img"></param>  
    public Image RotateImg(Image img, float angle)  
    {  
        //通过Png图片设置图片透明,修改旋转图片变黑问题。  
        int width = img.Width;  
        int height = img.Height;                      
        //角度  
        Matrix mtrx = new Matrix();             
        mtrx.RotateAt(angle, new PointF((width / 2), (height / 2)), MatrixOrder.Append);  
        //得到旋转后的矩形  
        GraphicsPath path = new GraphicsPath();  
        path.AddRectangle(new RectangleF(0f, 0f, width, height));  
        RectangleF rct = path.GetBounds(mtrx);  
        //生成目标位图  
        Bitmap devImage = new Bitmap((int)(rct.Width), (int)(rct.Height));  
        Graphics g = Graphics.FromImage(devImage);  
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;  
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;             
        //计算偏移量  
        Point Offset = new Point((int)(rct.Width - width) / 2, (int)(rct.Height - height) / 2);  
        //构造图像显示区域:让图像的中心与窗口的中心点一致  
        Rectangle rect = new Rectangle(Offset.X, Offset.Y, (int)width, (int)height);  
        Point center = new Point((int)(rect.X + rect.Width / 2), (int)(rect.Y + rect.Height / 2));              
        g.TranslateTransform(center.X, center.Y);  
        g.RotateTransform(angle);  
        //恢复图像在水平和垂直方向的平移  
        g.TranslateTransform(-center.X, -center.Y);  
        g.DrawImage(img, rect);  
        //重至绘图的所有变换  
        g.ResetTransform();  
        g.Save();  
        g.Dispose();  
        path.Dispose();  
        return devImage;  
    } 

 (2)按弧度旋转

    /// <summary>  
    /// 第二种方法  
    /// </summary>  
    /// <param name="b"></param>  
    /// <param name="angle"></param>  
    /// <returns></returns>  
    public Image RotateImg2(Image b, float angle)  
    {  
        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)));  
        //目标位图  
        Image 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(360-angle);  
        //恢复图像在水平和垂直方向的平移  
        g.TranslateTransform(-center.X, -center.Y);  
        g.DrawImage(b, rect);  
        //重至绘图的所有变换  
        g.ResetTransform();  
        g.Save();  
        g.Dispose();  
        //dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);  
        return dsImage;  
    }

以上参考:基于C#的两种图片旋转方法

此外,可以直接使用已封装的方法:

/// <summary>  
/// 旋转(利用已封装的方法) 
/// </summary>  
/// <param name="path">图片路径</param>  
/// <param name="rotateFlipType">旋转方式</param>  
/// <returns></returns>  
public bool KiRotate(string path, RotateFlipType rotateFlipType)  
{  
    try  
    {  
        using (Bitmap bitmap = new Bitmap(path))  
        {  
            // 顺时针旋转90度 RotateFlipType.Rotate90FlipNone
            // 逆时针旋转90度 RotateFlipType.Rotate270FlipNone
            // 水平翻转 RotateFlipType.Rotate180FlipY
            // 垂直翻转 RotateFlipType.Rotate180FlipX
            bitmap.RotateFlip(rotateFlipType);  
            bitmap.Save(path);  
        }  
        return true;  
    }  
    catch(Exception ex)  
    {  
        return false;  
    }  
} 

 

 

Base64处理

最常见的用于传输8Bit字节码的编码方式之一,Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。

  • 每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3
  • 个字符变成4个字符,每76个字符加一个换行符,最后的结束符也要处理

 

C# - 图片旋转和Base64处理

标签:using   换行符   bool   isp   lap   fse   jpg   tail   传递   

原文地址:https://www.cnblogs.com/wjcx-sqh/p/8143508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!