我有一个相当简单的问题: 如果我想在RGB光谱中保存颜色,那么将它保存在内存中的最有效方法是什么? (我不包括包装类,因为这取决于语言)
例如在伪代码中:
int r = 255;
int g = 255;
int b = 255;
和
string rgb = "#FFFFFF";
是描述rgb值的两种方法,但是还需要更多空间保留。我想知道是否有“最好”的方法来做到这一点。
在我看来,它可能是char
数据类型,但您需要其中三种,那么如何有效地保存它们呢?
答案 0 :(得分:2)
虽然它可能不是最有效的方法,但是将所有三个8位值存储在一个int中,并且如果需要,使用剩余的8位用于alpha,这是执行此操作的标准方法。例如(在类似C的代码中):
int convert(int r, int g, int b, int a)
{
return (r << 24) | (g << 16) | (b << 8) | a;
}
int getR(int rgba)
{
return (rgba >> 24) & 0xFF;
}
要获得其他值,只需将shift替换为24,绿色为16,蓝色为8,alpha为0。
存储三个字符也可以正常工作。字符串使用的内存比需要的多得多。但实际上,你存储了多少种颜色?您的应用程序是否使用了太多存储空间?如果没有,可能不需要担心。