最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#圖片按比例縮放的實(shí)現(xiàn)代碼

 更新時(shí)間:2014年01月08日 15:22:41   作者:  
這篇文章主要介紹了C#圖片按比例縮放的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下

復(fù)制代碼 代碼如下:

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

namespace Publics
{
    public class ImgHelper
    {
        public static void AdjustPhoto(int toWidth, int toHeight, string filePath, string fromFileName, string toFileName, int maxWidth, int maxHeight)
        {
            Image originalImage = Image.FromFile(filePath + "/" + fromFileName);
            //如果尺寸不夠返回保存原圖
            if (originalImage.Width < toWidth && originalImage.Height < toHeight)
            {
                originalImage.Save(filePath + "/" + toFileName);
                originalImage.Dispose();
                return;
            }

            //根據(jù)圖片大小獲取新圖片從原圖片截取的區(qū)域
            int x, y, w, h;
            if (toHeight > 0)
            {
                if (toWidth > 0)
                {
                    if (originalImage.Width > toWidth && originalImage.Height > toHeight)
                    {
                        w = toWidth;
                        h = toWidth * originalImage.Height / originalImage.Width;

                        if (h > toHeight)
                        {
                            h = toHeight;
                            w = toHeight * originalImage.Width / originalImage.Height;
                            x = (toWidth - w) / 2;
                            y = 0;
                        }
                        else
                        {
                            x = 0;
                            y = (toHeight - h) / 2;
                        }
                    }
                    else if (originalImage.Width > toWidth)
                    {
                        w = toWidth;
                        h = toWidth * originalImage.Height / originalImage.Width;
                        x = 0;
                        y = (toHeight - h) / 2;
                    }
                    else if (originalImage.Height > toHeight)
                    {
                        h = toHeight;
                        w = toHeight * originalImage.Width / originalImage.Height;
                        x = (toWidth - w) / 2;
                        y = 0;
                    }
                    else
                    {
                        w = originalImage.Width;
                        h = originalImage.Height;
                        x = (toWidth - w) / 2;
                        y = (toHeight - h) / 2;
                    }
                }
                else
                {
                    if (originalImage.Height > maxHeight)
                    {
                        toWidth = toHeight * originalImage.Width / originalImage.Height;
                        x = 0;
                        y = 0;
                        w = toWidth;
                        h = toHeight;

                    }
                    else
                    {
                        x = 0;
                        y = 0;
                        w = originalImage.Width;
                        h = originalImage.Height;
                        toWidth = originalImage.Width;
                        toHeight = originalImage.Height;
                    }
                }
            }
            else
            {
                if (originalImage.Width > maxWidth)
                {
                    toHeight = toWidth * originalImage.Height / originalImage.Width;
                    x = 0;
                    y = 0;
                    w = toWidth;
                    h = toHeight;

                }
                else
                {
                    x = 0;
                    y = 0;
                    w = originalImage.Width;
                    h = originalImage.Height;
                    toWidth = originalImage.Width;
                    toHeight = originalImage.Height;
                }
            }
            Bitmap bm = new Bitmap(toWidth, toHeight);
            Graphics g = Graphics.FromImage(bm);

            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            g.Clear(Color.White);
            g.DrawImage(originalImage, new Rectangle(x, y, w, h), 0, 0, originalImage.Width, originalImage.Height, GraphicsUnit.Pixel);

            long[] quality = new long[1];
            quality[0] = 80;

            EncoderParameters encoderParams = new EncoderParameters();
            EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, quality);
            encoderParams.Param[0] = encoderParam;
            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();//獲得包含有關(guān)內(nèi)置圖像編碼解碼器的信息的ImageCodecInfo 對(duì)象。
            ImageCodecInfo jpegICI = null;
            for (int i = 0; i < arrayICI.Length; i++)
            {
                if (arrayICI[i].FormatDescription.Equals("JPEG"))
                {
                    jpegICI = arrayICI[i];//設(shè)置JPEG編碼
                    break;
                }
            }
            if (jpegICI != null)
            {

                //bm.Save(Server.MapPath(path + "/thumb_" + filename), jpegICI, encoderParams);
                bm.Save(filePath + "/" + toFileName, jpegICI, encoderParams);
            }

            bm.Dispose();
            originalImage.Dispose();
            g.Dispose();
        }

        /// <summary>
        /// 保持比例圖像縮放簡(jiǎn)易算法
        /// </summary>
        /// <param name="spcWidth"></param>
        /// <param name="spcHeight"></param>
        /// <param name="orgWidth"></param>
        /// <param name="orgHeight"></param>
        /// <returns></returns>
        public static Dictionary<string, int> AdjustSize(int spcWidth, int spcHeight, int orgWidth, int orgHeight)
        {
            Dictionary<string, int> size = new Dictionary<string, int>();
            // 原始寬高在指定寬高范圍內(nèi),不作任何處理 
            if (orgWidth <= spcWidth && orgHeight <= spcHeight)
            {
                size["Width"] = orgWidth;
                size["Height"] = orgHeight;
            }
            else
            {
                // 取得比例系數(shù) 
                float w = orgWidth / (float)spcWidth;
                float h = orgHeight / (float)spcHeight;
                // 寬度比大于高度比 
                if (w > h)
                {
                    size["Width"] = spcWidth;
                    size["Height"] = (int)(w >= 1 ? Math.Round(orgHeight / w) : Math.Round(orgHeight * w));
                }
                // 寬度比小于高度比 
                else if (w < h)
                {
                    size["Height"] = spcHeight;
                    size["Width"] = (int)(h >= 1 ? Math.Round(orgWidth / h) : Math.Round(orgWidth * h));
                }
                // 寬度比等于高度比 
                else
                {
                    size["Width"] = spcWidth;
                    size["Height"] = spcHeight;
                }
            }
            return size;
        }
    }
}

相關(guān)文章

  • C#實(shí)現(xiàn)的圖片、string相互轉(zhuǎn)換類(lèi)分享

    C#實(shí)現(xiàn)的圖片、string相互轉(zhuǎn)換類(lèi)分享

    這篇文章主要介紹了C#實(shí)現(xiàn)的圖片、string相互轉(zhuǎn)換類(lèi)分享,本文直接給出類(lèi)代碼,包含相互轉(zhuǎn)換的方法,需要的朋友可以參考下
    2015-03-03
  • C#圖像偽彩色處理方法

    C#圖像偽彩色處理方法

    這篇文章主要介紹了C#圖像偽彩色處理方法,涉及C#操作圖像的偽彩色相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#實(shí)現(xiàn)FTP客戶(hù)端的案例

    C#實(shí)現(xiàn)FTP客戶(hù)端的案例

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)FTP客戶(hù)端的小案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#讀取文件MD5值的實(shí)現(xiàn)代碼

    C#讀取文件MD5值的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C#讀取文件MD5值的實(shí)現(xiàn)代碼,有了這個(gè)核心代碼,就可以實(shí)現(xiàn)校驗(yàn)文件MD5值的一些程序了,需要的朋友可以參考下
    2014-08-08
  • C#壓縮和解壓文件的兩種方法

    C#壓縮和解壓文件的兩種方法

    在C#中,我們可以使用內(nèi)置的System.IO命名空間下的幾個(gè)類(lèi)來(lái)處理文件的壓縮和解壓縮,主要涉及到兩個(gè)常用的庫(kù):System.IO.Compression和WinRAR,以下是使用這些類(lèi)進(jìn)行文件壓縮和解壓縮的基本步驟,需要的朋友可以參考下
    2024-08-08
  • C#操作txt文件,進(jìn)行清空添加操作的小例子

    C#操作txt文件,進(jìn)行清空添加操作的小例子

    這篇文章介紹了C#操作txt文件,進(jìn)行清空添加操作的小例子,有需要的朋友可以參考一下
    2013-09-09
  • C#數(shù)據(jù)庫(kù)連接方式(類(lèi)的形式)

    C#數(shù)據(jù)庫(kù)連接方式(類(lèi)的形式)

    這篇文章主要介紹了C#數(shù)據(jù)庫(kù)連接方式(類(lèi)的形式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 基于C#實(shí)現(xiàn)的仿windows左側(cè)伸縮菜單效果

    基于C#實(shí)現(xiàn)的仿windows左側(cè)伸縮菜單效果

    這篇文章主要介紹了基于C#實(shí)現(xiàn)的仿windows左側(cè)伸縮菜單效果,比較實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • C#中的Linq?to?JSON操作詳解

    C#中的Linq?to?JSON操作詳解

    本文詳細(xì)講解了C#中的Linq?to?JSON操作,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c#通過(guò)app.manifest使程序以管理員身份運(yùn)行

    c#通過(guò)app.manifest使程序以管理員身份運(yùn)行

    通常我們使用c#編寫(xiě)的程序不會(huì)彈出這個(gè)提示,也就無(wú)法以管理員身分運(yùn)行。微軟的操作系統(tǒng)使用微軟的產(chǎn)品方法當(dāng)然是有的,通過(guò)app.manifest配置可以使程序打開(kāi)的時(shí)候,彈出UAC提示需要得到允許才可以繼續(xù),這樣就獲得了管理員的權(quán)限來(lái)執(zhí)行程序
    2015-01-01

最新評(píng)論

承德市| 嘉黎县| 古田县| 惠来县| 赣榆县| 新郑市| 福建省| 衡水市| 台北县| 墨竹工卡县| 阿拉善左旗| 中超| 沐川县| 泰安市| 迁安市| 峨眉山市| 德清县| 武胜县| 宽城| 横峰县| 奉节县| 博野县| 盘锦市| 武城县| 金秀| 崇义县| 瓮安县| 修文县| 眉山市| 年辖:市辖区| 瑞金市| 冕宁县| 崇阳县| 察雅县| 和顺县| 怀仁县| 凤翔县| 南开区| 阿克苏市| 东明县| 扎囊县|