实现图片圆角

今天特意找了个关于图片去圆角的文章
找到 http://www.cnblogs.com/lovecherry/archive/2006/05/17/402541.html
提供了主要的 关键代码:
我稍微的去了些功能 只留下了一个方法 来处理 图片圆角的功能
嘿嘿
实现图片圆角_第1张图片
其实其他的几个方法还没来得及看
创建一个类
COPY进去
using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Drawing;
using  System.Drawing.Drawing2D;
using  System.Drawing.Imaging;

/**/ /// 
/// Class1 的摘要说明
/// 

public   class  MyGDI
{
  
    
//创建 圆角图片的方法
    方法参数的说明#region 方法参数的说明
    
/**//*
     * sSrcFilePath 为原始图片路径
     * 
     * sDstFilePath  为创建完圆角的图片路径
     * 
     * sCornerLocation  使用 方法CreateRoundRectanglePath  返回GraphicsPath 类型 
     * 可选字符串为TopLeft,TopRight,BottomLeft,BottomRight
     
     
*/

    
#endregion

    
public static void CreateRoundedCorner(string sSrcFilePath, string sDstFilePath, string sCornerLocation)
    
{
        System.Drawing.Image image 
= System.Drawing.Image.FromFile(sSrcFilePath);
        Graphics g 
= Graphics.FromImage(image);
        g.SmoothingMode 
= SmoothingMode.HighQuality;
        g.InterpolationMode 
= InterpolationMode.HighQualityBicubic;
        g.CompositingQuality 
= CompositingQuality.HighQuality;
        Rectangle rect 
= new Rectangle(00, image.Width, image.Height);
        GraphicsPath rectPath 
= CreateRoundRectanglePath(rect, image.Width / 10, sCornerLocation); //构建圆角外部路径
        Brush b = new SolidBrush(Color.White);//圆角背景白色
        g.DrawPath(new Pen(b), rectPath);
        g.FillPath(b, rectPath);
        g.Dispose();
        image.Save(sDstFilePath, ImageFormat.Jpeg);
        image.Dispose();
    }


  

    
private static GraphicsPath CreateRoundRectanglePath(Rectangle rect, int radius, string sPosition)
    
{
        GraphicsPath rectPath 
= new GraphicsPath();
        
switch (sPosition)
        
{
            
case "TopLeft":
                
{
                    rectPath.AddArc(rect.Left, rect.Top, radius 
* 2, radius * 218090);
                    rectPath.AddLine(rect.Left, rect.Top, rect.Left, rect.Top 
+ radius);
                    
break;
                }


            
case "TopRight":
                
{
                    rectPath.AddArc(rect.Right 
- radius * 2, rect.Top, radius * 2, radius * 227090);
                    rectPath.AddLine(rect.Right, rect.Top, rect.Right 
- radius, rect.Top);
                    
break;
                }


            
case "BottomLeft":
                
{
                    rectPath.AddArc(rect.Left, rect.Bottom 
- radius * 2, radius * 2, radius * 29090);
                    rectPath.AddLine(rect.Left, rect.Bottom 
- radius, rect.Left, rect.Bottom);
                    
break;
                }


            
case "BottomRight":
                
{
                    rectPath.AddArc(rect.Right 
- radius * 2, rect.Bottom - radius * 2, radius * 2, radius * 2090);
                    rectPath.AddLine(rect.Right 
- radius, rect.Bottom, rect.Right, rect.Bottom);
                    
break;
                }

        
        }

        
return rectPath;
    }

}


我使用了一个笨方法来实现 一个图片一次性的将四个圆角全部切出来
这个方法太笨了


     protected   void  Page_Load( object  sender, EventArgs e)
    
{
     
//   MyGDI.
        MyGDI.CreateRoundedCorner(@"C:\01.JPG"@"C:\02.JPG""TopLeft");
        MyGDI.CreateRoundedCorner(
@"c:\02.jpg"@"c:\03.jpg""TopRight");
        MyGDI.CreateRoundedCorner(
@"C:\03.JPG"@"C:\04.JPG""BottomLeft");
        MyGDI.CreateRoundedCorner(
@"c:\04.jpg"@"c:\05.jpg""BottomRight");
        
        
    }


我试过这么做
         // case "TopAll":
            
//     {
            
//         rectPath.AddArc(rect.Left, rect.Top, radius * 2, radius * 2, 180, 90);
            
//         rectPath.AddLine(rect.Left, rect.Top, rect.Left, rect.Top + radius);
            
//         rectPath.AddArc(rect.Right - radius * 2, rect.Top, radius * 2, radius * 2, 270, 90);
            
//         rectPath.AddLine(rect.Right, rect.Top, rect.Right - radius, rect.Top);
            
//          // rectPath.AddArc(rect.Left, rect.Bottom - radius * 2, radius * 2, radius * 2, 90, 90);
            
//          // rectPath.AddLine(rect.Left, rect.Bottom - radius, rect.Left, rect.Bottom);
            
//          // rectPath.AddArc(rect.Right - radius * 2, rect.Bottom - radius * 2, radius * 2, radius * 2, 0, 90);
            
//          // rectPath.AddLine(rect.Right - radius, rect.Bottom, rect.Right, rect.Bottom);
            
//         break;

            
//     }
            
// case "BottomAll":
            
//     {
            
//          // rectPath.AddArc(rect.Left, rect.Top, radius * 2, radius * 2, 180, 90);
            
//          // rectPath.AddLine(rect.Left, rect.Top, rect.Left, rect.Top + radius);
            
//          // rectPath.AddArc(rect.Right - radius * 2, rect.Top, radius * 2, radius * 2, 270, 90);
            
//          // rectPath.AddLine(rect.Right, rect.Top, rect.Right - radius, rect.Top);
            
//         rectPath.AddArc(rect.Left, rect.Bottom - radius * 2, radius * 2, radius * 2, 90, 90);
            
//         rectPath.AddLine(rect.Left, rect.Bottom - radius, rect.Left, rect.Bottom);
            
//         rectPath.AddArc(rect.Right - radius * 2, rect.Bottom - radius * 2, radius * 2, radius * 2, 0, 90);
            
//         rectPath.AddLine(rect.Right - radius, rect.Bottom, rect.Right, rect.Bottom);
            
//         break;

            
//     }

但是 图片出来后 面目全非

哪位朋友可以帮我看看 有没有更好点的方法

转载于:https://www.cnblogs.com/zbqy/archive/2007/05/06/737108.html

你可能感兴趣的:(实现图片圆角)