首页 > 编程 > C# > 正文

使用C#绘制图片的几个方法

2023-05-14 16:26:28
字体:
来源:转载
供稿:网友

本文介绍了使用C#绘制图片的几个方法,主要解决了以下几个问题:

1)如何获取.gif图片中的各个帧?

2)如何获取图片的缩略图?

3)如何“截取”图片的指定区域?

using System.Drawing;  
using System.Drawing.Drawing2D;  
using System.Drawing.Imaging;  
 
public class ImageHelper  
{  
    /// <summary><SUMMARY></SUMMARY>  
    /// 获取图片中的各帧  
    /// </summary>  
    /// <param name="pPath"><PARAM name="pPath" />图片路径</param>  
    /// <param name="pSavePath"><PARAM name="pSavePath" />保存路径</param>  
    public void GetFrames(string pPath, string pSavedPath)  
    {  
        Image gif = Image.FromFile(pPath);  
        FrameDimension fd = new FrameDimension(gif.FrameDimensionsList[0]);  
 
        //获取帧数(gif图片可能包含多帧,其它格式图片一般仅一帧)  
        int count = gif.GetFrameCount(fd);  
 
        //以Jpeg格式保存各帧   
        for (int i = 0; i < count; i++)  
        {  
            gif.SelectActiveFrame(fd, i);  
            gif.Save(pSavedPath + "//frame_" + i + ".jpg", ImageFormat.Jpeg);  
        }  
    }  
 
    /// <summary><SUMMARY></SUMMARY>  
    /// 获取图片缩略图  
    /// </summary>  
    /// <param name="pPath"><PARAM name="pPath" />图片路径</param>  
    /// <param name="pSavePath"><PARAM name="pSavePath" />保存路径</param>  
    /// <param name="pWidth"><PARAM name="pWidth" />缩略图宽度</param>  
    /// <param name="pHeight"><PARAM name="pHeight" />缩略图高度</param>  
    /// <param name="pFormat"><PARAM name="pFormat" />保存格式,通常可以是jpeg</param>  
    public void GetSmaller(string pPath, string pSavedPath, int pWidth, int pHeight)  
    {  
        try 
        {  
            Image smallerImg;  
            Image originalImg = Image.FromFile(pPath);  
            Image.GetThumbnailImageAbort callback = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
            smallerImg = originalImg.GetThumbnailImage(pWidth, pHeight, callback, IntPtr.Zero);  
            smallerImg.Save(pSavedPath + "//smaller.jpg", ImageFormat.Jpeg);  
        }  
        catch (Exception x)  
        {  
            //  
        }  
    }  
 
    /// <summary><SUMMARY></SUMMARY>  
    /// 获取图片指定部分  
    /// </summary>  
    /// <param name="pPath"><PARAM name="pPath" />图片路径</param>  
    /// <param name="pSavePath"><PARAM name="pSavePath" />保存路径</param>  
    /// <param name="pPartStartPointX"><PARAM name="pPartStartPointX" />目标图片开始绘制处的坐标X值(通常为)</param>  
    /// <param name="pPartStartPointY"><PARAM name="pPartStartPointY" />目标图片开始绘制处的坐标Y值(通常为)</param>  
    /// <param name="pPartWidth"><PARAM name="pPartWidth" />目标图片的宽度</param>  
    /// <param name="pPartHeight"><PARAM name="pPartHeight" />目标图片的高度</param>  
    /// <param name="pOrigStartPointX"><PARAM name="pOrigStartPointX" />原始图片开始截取处的坐标X值</param>  
    /// <param name="pOrigStartPointY"><PARAM name="pOrigStartPointY" />原始图片开始截取处的坐标Y值</param>  
    /// <param name="pFormat"><PARAM name="pFormat" />保存格式,通常可以是jpeg</param>  
    public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)  
    {  
        Image originalImg = Image.FromFile(pPath);  
 
        Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);  
        Graphics graphics = Graphics.FromImage(partImg);  
        Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置  
        Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)  
 
        graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);  
        partImg.Save(pSavedPath + "//part.jpg", ImageFormat.Jpeg);  
    }  
 
    public bool ThumbnailCallback()  
    {  
        return false;  
    }  
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表