C 無損轉換Image為Icon的方法

2022-09-26 04:30:16 字數 1132 閱讀 7207

如題,市面上常見的方法是:

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字串,如果第乙個非空格字元存在,是數字或者正負號則開...