簡體   English   中英

System.Drawing.Color轉換FromArgb問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM