C#對圖片的幾種簡單處理 [ZT]

來源:互聯網
上載者:User
 

又有一段時間沒有更新了,缺少學習的熱情了。今天貼幾個圖片處理的小技巧,希望對大家有用:
(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;
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.