[英]System.Drawing.Color convert FromArgb issue
我將顏色保存為int值。
int icolor = System.Drawing.Color.Red.ToArgb();
//result: -65536
當將int轉換為Color時,將丟失屬性Color.Name。 必須返回“紅色”,但屬性返回“ ff000000”。 我在做什么?
我需要得到一個-紅色屬性,而不是十六進制值
嘗試這個
System.Drawing.ColorTranslator.FromHtml("#" + "Hex value").Name
你沒做錯什么
ff
(十六進制)等於255,它是Red
的十進制值,由System.Drawing.Color.Red.ToArgb();
返回System.Drawing.Color.Red.ToArgb();
如果要獲取顏色的名稱,請使用System.Drawing.Color.Red.Name
string sRedColorName = System.Drawing.Color.Red.Name;
當將int轉換為Color時,將丟失屬性Color.Name。
對,那是正確的。 這就是Color.Name
屬性的工作方式。 根據文檔 :
如果從名稱創建顏色,則此方法返回用戶定義的顏色名稱,或者返回已知顏色的名稱。 對於自定義顏色,返回RGB值。
因此,由於您是根據整數(RGB)值(而不是其名稱)創建Color
對象,因此Color
結構不會將其識別為命名顏色。
在運行時,不會通過遍歷包含所有已知顏色及其RGB值的映射來動態確定此信息,而是在創建Color
對象時將其存儲在私有標記字段中。 在將顏色信息作為整數序列化到數據庫的過程中,您正在丟失該信息。
您混合了已知的顏色和只是顏色。 當您將已知顏色轉換為int並將其轉換回顏色時,您會失去名稱。 您必須這樣做:
int icolor = System.Drawing.Color.Red.ToArgb();
Color knownColor = System.Drawing.Color.FromArgb(icolor).ToKnownColor();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.