【发布时间】:2013-02-10 10:12:56
【问题描述】:
为使用 ICC 配置文件的颜色转换编写了一个小测试。 转换函数的工作速度要慢 1000 倍!
有什么问题?
Uri iccUri = new Uri("C:\\temp\\AdobeRGB1998.icc");
private Color AdobeColor(int r, int g, int b)
{
float[] colorValues = new float[3];
colorValues[0] = (float)r / 255.0f;
colorValues[1] = (float)g/255.0f;
colorValues[2] = (float)b/255.0f;
return Color.FromValues(colorValues,iccUri);
}
public void Test()
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int n = 0; n < 10; n++)
{
Color a = AdobeColor(n, n, n);//very very slow
//Color a = Color.FromRgb((byte)n, (byte)n, (byte)n);//very fast
}
sw.Stop();
TimeSpan ts;
ts = sw.Elapsed;
Console.WriteLine("result: {0}\n", ts.Seconds);
}
【问题讨论】:
-
你是如何测量相对速度的?我看不到计时码...
-
对这个函数的每次调用都是在几秒钟内完成的!
-
为什么不慢一点?您正在执行文件 IO 和颜色配置文件映射与简单的结构初始化。
-
不一样的1000倍!一个电话大约需要 1.5 秒。
-
我从 Adobe 下载了 ICC 并尝试了您的代码。它似乎能够在大约 40 毫秒内运行测试。这还不够好吗?
标签: c# performance colors color-profile color-management