今天貼幾個圖檔處理的小技巧,希望對大家有用:
(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;