[英]How can I convert text color values from text file to Color?
StreamReader w = new StreamReader(@"d:\colors.txt");
w.ReadLine();
w.Close();
文本文件行內容示例
RGBA(0.272, 0.272, 0.272, 0.500)
我想將這些值轉換為顏色,所以我稍后可以做,例如:
Color c = colorFromTextFile;
如果你的字符串看起來像給定的
RGBA(0.272, 0.272, 0.272, 0.500)
你可以使用
string.IndexOf
找到(
和)
string.Substring
然后提取這兩者之間的字符串string.Split
最終將其切割成單獨的顏色分量Single.Parse
將給定的字符串解析為float
值Color
構造函數像這樣的東西
public static bool TryParse(string input, out Color color)
{
// e.g. input = "RGBA(0.272, 0.272, 0.272, 0.500)"
color = default;
try
{
var firstChar = input.IndexOf('(') + 1;
// = 5
var lastChar = input.IndexOf(')') - 1;
// = 31
var colorDataLength = lastChar - firstCharIndex;
// 26
var colorData = input.SubString(firstChar, colorDataLength);
// = "0.272, 0.272, 0.272, 0.500"
var colorParts = colorData.Split(',');
// = string[]{"0.272", " 0.272", " 0.272", " 0.500"}
var r = float.Parse(colorParts[0].Trim());
// = 0.272f
var g = float.Parse(colorParts[1].Trim());
// = 0.272f
var b = float.Parse(colorParts[2].Trim());
// = 0.272f
var a = float.Parse(colorParts[3].Trim());
// = 0.5f
color = new Color(r, g, b, a);
return true;
}
catch(Exception e)
{
Debug.LogError($"{e.GetType()} while trying to parse string \"{input}\"!\n{e.Message}\n{e.StackTrace}");
return false;
}
}
所以你可以像這樣使用它
if(TryParse("RGBA(0.272, 0.272, 0.272, 0.500)", out var color))
{
// success -> use color
someMaterial.color = color;
}
或者,正如TheGeneral 在評論中提到的那樣,您也可以稍微縮短一點並使用Regex.Matches
直接查找各個顏色組件。 喜歡
var colorParts = Regex.Matches(input, @"[0-9](\.[0-9]+)");
// = MatchCollection{"0.272", "0.272", "0.272", "0.500"}
在這種情況下,您不需要使用string.Trim()
,因為它們已經沒有空格。
是的,您還可以使用Linq Select
來對一個float.Parse
中的所有元素進行 float.Parse
// This is basically a shortcut for doing something like
//var colorComponentsList = new List<float>();
//foreach(var part in colorParts)
//{
// colorComponentsList.Add(float.Parse(part.Value));
//}
//var colorComponents = colorComponentsList.ToArray();
var colorComponents = colorParts.Select(part => float.Parse(part.Value)).ToArray();
// = float[]{0.272f, 0.272f, 0.272f, 0.5f}
color = new Color(colorComponents[0], colorComponents[1], colorComponents[2], colorComponents[3]);
但是,如果您不受文件格式的約束,您應該將 colors 存儲為 HTML 顏色格式(十六進制)
#45454580
並使用ColorUtility.TryParseHtmlString
筆記是在智能手機上輸入的,所以請耐心等待,但我希望這個想法很清楚:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.