保存 RGB 颜色的最有效方法
Most efficient way to save RGB-Color
我有一个很简单的问题:
如果我想在 RGB 光谱中保存颜色,那么将它保存在内存中的最有效方法是什么? (我不包括包装器 类,因为这取决于语言)
例如在伪代码中:
int r = 255;
int g = 255;
int b = 255;
和
string rgb = "#FFFFFF";
有两种描述 rgb 值的方法,但也有更多 space 保留然后需要。我想知道是否有 "best" 方法可以做到这一点。
在我看来,它可能是 char
数据类型,但您将需要其中三个,那么您将如何有效地保存它们?
虽然这可能不是最有效的方法,但将所有三个 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。
存储三个字符也可以。字符串使用的内存比需要的多得多。但实际上,您存储了多少种颜色?您的应用程序使用的存储量 space 是否很大?如果没有,可能不需要担心。
我有一个很简单的问题: 如果我想在 RGB 光谱中保存颜色,那么将它保存在内存中的最有效方法是什么? (我不包括包装器 类,因为这取决于语言)
例如在伪代码中:
int r = 255;
int g = 255;
int b = 255;
和
string rgb = "#FFFFFF";
有两种描述 rgb 值的方法,但也有更多 space 保留然后需要。我想知道是否有 "best" 方法可以做到这一点。
在我看来,它可能是 char
数据类型,但您将需要其中三个,那么您将如何有效地保存它们?
虽然这可能不是最有效的方法,但将所有三个 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。
存储三个字符也可以。字符串使用的内存比需要的多得多。但实际上,您存储了多少种颜色?您的应用程序使用的存储量 space 是否很大?如果没有,可能不需要担心。