.NET基础示例系列之二十:对图片的几种简单处理

又有一段时间没有更新了,缺少学习的热情了。今天贴几个图片处理的小技巧,希望对大家有用:
(1)如何获取.gif图片中的各个帧?
(2)如何获取图片的缩略图?
(3)如何“截取”图片的指定区域?

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

public class ImageHelper
{
    
/// <summary>
    
/// 获取图片中的各帧
    
/// </summary>
    
/// <param name="pPath">图片路径</param>
    
/// <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>
    
/// <param name="pPath">图片路径</param>
    
/// <param name="pSavePath">保存路径</param>
    
/// <param name="pWidth">缩略图宽度</param>
    
/// <param name="pHeight">缩略图高度</param>
    
/// <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>
    
/// <param name="pPath">图片路径</param>
    
/// <param name="pSavePath">保存路径</param>
    
/// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
    
/// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
    
/// <param name="pPartWidth">目标图片的宽度</param>
    
/// <param name="pPartHeight">目标图片的高度</param>
    
/// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
    
/// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
    
/// <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;
    }

}

 

posted @ 2007-10-13 20:15  后厂村思维导图馆  阅读(2976)  评论(2编辑  收藏  举报