如題,市面上常見的方法是:
var handle = bmp.gethicon(); //得到圖示控制代碼
return icon.fromhandle(handle); //通過控制代碼得到圖示
此法的問題是,如果影象是透明背景,那麼得到的icon的邊緣就是毛糙的,像是先墊了一層背景色然後再去色的效果,很不如人意,用過的朋友都知道。尚未研究是bmp.gethicon出的問題程式設計客棧,還是icon.fromhandle有問題,日後有閒心再搗鼓下。
下面給出完美轉換方法:
///
//程式設計客棧/ 轉換image為icon
///
/// 要轉換為圖示的image物件
/// 當image為null時是否返回null。false則拋空引用異常
/// www.cppcns.comlexception" />
public static icon converttoicon(image image, bool nulltonull = false)
throw new argumentnullexception("image");
} using (memorystream msimg = new memorystream()
, msico = new memorystream())}}
如碼所示,方法的原理是:
1、先將image編碼為png
2、再將png原樣包裝成乙個icon
第1步雖然是重編碼,但png是無損格式,影象質量不會有絲毫損失。然後在二進位制層面原封不動的把轉換得到的png塞入圖示。所以整個方法擔得起【無損】的說法,介意失真的朋友請放心使用。注意:方法中並未對原圖size做檢查、處理,所以請先確保原圖的尺寸符合圖示規格再傳入;另外,不負責銷毀原圖,請呼叫者在外部負責。
下面是閒扯:
為了解決這個問題還真費了番功夫,stackoverflow、codeproject等神蹟多現的地方逛了幾圈都沒找到如意的chdpzfyzz法子,思索一番後感覺可以從圖示格式上嘗試,然後在萬能的msdn果然找到一篇講icon格式的文件:還好不算很難理解,一番嘗試之下,方法出爐。
-文畢-
本文標題: c#無損轉換image為icon的方法
本文位址: /ruanjian/csharp/183810.html
c 轉換char為string的幾種方式
使用string建構函式 char c 1 std string s 1 c std cout s std endl 使用stringstream char c 1 std string s std stringstream ss ss c ss s s ss.str std cout s std ...
c 利用正則轉換數字日期為漢字日期
最近再寫乙個c 的專案,需輸出漢字日期,網上翻了一圈發現寫的都比較麻煩。所以結合網上將數字轉換為漢字大寫金額的正則,寫了個日期轉換函式。public static string converttochineselite decimal number if number 100 d regex.rep...
c語言中的轉換字串為整數的函式
1 atoi函式把字串轉換成整型數。其含義是ascii to integer 的縮寫。2 函式說明 1 簡介編輯c語言庫函式名 atoi 原型 int atoi const char nptr unicode wtoi 2 函式說明編輯引數nptr字串,如果第乙個非空格字元存在,是數字或者正負號則開...