日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

您能看出这个生成缩略图的方法有什么问题吗?

發布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 您能看出这个生成缩略图的方法有什么问题吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

昨天又使用了某個多年以前寫的,或者說是“收集”而來的方法。這個方法的作用是根據一幅圖片(一般是幅大圖)生成它的縮略圖。這個方法用了許多年了,一直沒有去懷疑過它的正確性,但是昨天忽然發現它一直以來都存在一個問題,雖然可能不是那么明顯,而且也不會造成太大問題(否則早就發現了)——但是,這的確是個不妥的地方。這個問題在我看來也有一定借鑒意義,因此我打算把它展示出來。那么,您能否看出它究竟是錯在什么地方了呢?

生成縮略圖的規則很簡單,概括地說有三點:

  • 包含圖片完整內容,以及長寬比不變。
  • 尺寸盡可能大,但如果圖片本身很小,也不做拉伸。
  • 不超過指定的width * height的范圍內。
  • 這個規則其實就是最傳統的縮略圖生成方式,使用如Windows照片瀏覽器等軟件打開圖片后,一般來說默認都會如此調整圖片尺寸。而我們如果需要寫一段代碼來實現這一點也并不困難,以下便是我用了許多年的方法:

    /// <summary> /// Creates a thumbnail from an existing image. Sets the biggest dimension of the /// thumbnail to either desiredWidth or Height and scales the other dimension down /// to preserve the aspect ratio /// </summary> /// <param name="imageStream">stream to create thumbnail for</param> /// <param name="desiredWidth">maximum desired width of thumbnail</param> /// <param name="desiredHeight">maximum desired height of thumbnail</param> /// <returns>Bitmap thumbnail</returns> public Bitmap CreateThumbnail(Bitmap originalBmp, int desiredWidth, int desiredHeight) {// If the image is smaller than a thumbnail just return itif (originalBmp.Width <= desiredWidth && originalBmp.Height <= desiredHeight){return originalBmp;}int newWidth, newHeight;// scale down the smaller dimensionif ((decimal)desiredWidth / originalBmp.Width < (decimal)desiredHeight / originalBmp.Height){decimal desiredRatio = (decimal)desiredWidth / originalBmp.Width;newWidth = desiredWidth;newHeight = (int)(originalBmp.Height * desiredRatio);}else{decimal desiredRatio = (decimal)desiredHeight / originalBmp.Height;newHeight = desiredHeight;newWidth = (int)(originalBmp.Width * desiredRatio);}// This code creates cleaner (though bigger) thumbnails and properly// and handles GIF files better by generating a white background for// transparent images (as opposed to black)// This is preferred to calling Bitmap.GetThumbnailImage()Bitmap bmpOut = new Bitmap(newWidth, newHeight);using (Graphics graphics = Graphics.FromImage(bmpOut)){graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;graphics.FillRectangle(Brushes.White, 0, 0, newWidth, newHeight);graphics.DrawImage(originalBmp, 0, 0, newWidth, newHeight);}return bmpOut; }

    它的具體來源我已經記不得了,不過從英文注釋上來看這應該是個老外寫的代碼,那么我們現在就來解釋一番。首先,這個方法會先判斷源圖片的大小是否已經可以放入目標區域(desiredWidth * desiredHeight)中了,如果是,則直接返回源圖片。如果不滿足第一個判斷,則說明寬和高之中至少有一個超出了目標尺寸,而我們要對源圖片進行等比例縮放。

    那么縮放的“比例”又是多少呢?自然是“寬”或“高”中縮放“程度大”的那個。因為如果按照縮放程度小的那條邊的比例來改變圖片尺寸,那么另一條邊勢必會超出范圍。因此,我們接下來便是比較desiredWidth與originalBmp.Width之比,以及desiredHeight與originalBmp.Height之比孰大孰小。哪個小,則意味著我們要把它作為縮放依據,因為它對圖片尺寸的限制要比另一條邊來的嚴格。于是乎,再第二個條件判斷的任意一個分支中,我們都可以計算出縮放的比例(desiredRatio),然后把作為“依據”的那條邊設為desiredWidth/Height,將另一條邊根據縮放比例進行調整。在計算和比較過程中我們都使用了decimal數據類型,因為它是.NET中精度最高的浮點數類型,我們以此減少計算過程中所帶來的誤差。

    至于得到了newWidth和newHeight之后,我們便只要根據這個尺寸生成目標圖片即可,它便是源圖片的縮略圖,符合我們之前提出的三個要求。

    聽起來很簡單,看上去也沒有什么問題,不是嗎?不過,其實這個實現中有一個不那么明顯的問題,您發現了嗎?(答案)

    總結

    以上是生活随笔為你收集整理的您能看出这个生成缩略图的方法有什么问题吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 狠狠综合久久av一区二区 | 亚洲高清免费观看 | 国产精品乱码久久久久久 | 欧美 日韩 高清 | 国产精品丝袜一区 | 日韩精品一区二区免费视频 | 成人在线免费观看网站 | 久久久久国产综合av天堂 | 欧美人妖老妇 | 欧美九九九| 亚洲少妇激情 | 成年人在线免费观看网站 | 国产制服丝袜 | 最新免费av网站 | 国产精品91一区二区 | 99国产精品久久 | 成人黄色片免费看 | 99色综合| 天堂影视av | 久久精品www人人爽人人 | 亚洲丁香花色 | 极品少妇xxx | 男女啪啪免费网站 | 欧美成人精品在线 | 国产日批视频在线观看 | 蜜臀av一区二区三区激情综合 | 九色精品在线 | 日韩超碰 | bbbbbxxxxx性欧美 | 永久av免费| 西西444www无码大胆 | 久福利 | 国产高清不卡av | 日韩av三级在线观看 | 4438亚洲 | 久久久久性 | 欧美人与动物xxxx | 中文字幕无码毛片免费看 | 午夜影院0606 | 日韩 中文字幕 | 香蕉视频97 | 污网站免费观看 | 爱操av | 成人久久久 | 人人九九精品 | 一级黄色毛毛片 | 色婷婷激情 | 国产成人精品一区二区三 | 亚洲一区成人在线 | 日韩欧美国产激情 | 成人一区在线观看 | 视频在线亚洲 | 夜夜爱爱 | 亚洲一区二区天堂 | 免费在线观看日韩 | 椎名由奈av一区二区三区 | 亚洲人成电影在线 | 多啪啪免费视频 | 国产精品久久久久久亚洲色 | 一区二区三区精 | 一本色道久久加勒比精品 | 亚洲AV无码精品久久一区二区 | 色猫咪av| 欧美网站在线 | 日本美女操 | 国产精品亚洲一区二区三区 | av午夜在线观看 | 国产精品高清无码在线观看 | 成人夜色 | 日韩在线影院 | 在线视频一区二区三区四区 | 天堂在线资源库 | 在线a网站 | 日本黄色片一级 | 奇米精品一区二区三区在线观看 | 琪琪伦伦影院理论片 | 噼里啪啦免费观看 | 午夜在线观看影院 | av超碰 | 99久久久无码国产精品免费蜜柚 | 波多野吉衣一区二区三区 | 肉丝超薄少妇一区二区三区 | 网站在线免费观看 | 日韩精品一线二线三线 | 丰满少妇被猛烈进入无码 | 在线免费观看你懂的 | 性自由色xxxx免费视频 | 久久接色 | 午夜激情一区 | 一区二区三区免费在线观看视频 | 亚洲自偷自偷偷色无码中文 | 成人激情开心 | 国产精品欧美激情 | 97超碰导航 | 齐天大性床战铁扇公主 | 亚洲国产精选 | 亚洲男女视频 | 欧美精品不卡 | 亚洲久久视频 |