2016-02-02 28 views
0

我有一个相当简单的问题: 如果我想要在RGB光谱中保存颜色,那么将它保存在内存中最有效的方法是什么? (我不包括包装类,因为这将取决于语言)最有效的方法来保存RGB颜色

例如,在伪代码:

int r = 255; 
int g = 255; 
int b = 255; 

string rgb = "#FFFFFF"; 

是描述一个RGB值的两种方法,而且还需要更多的空间。我想知道是否有“最好”的方式来做到这一点。

在我看来,它可能是char数据类型,但你需要其中三个,你将如何保存它们有效呢?

+0

错误,可能取决于你的语言,如果你的意思是在内存或磁盘上... –

+0

感谢您的评论。我编辑了这个问题。如果它取决于语言,那么你说没有“最好”的方式? –

+0

这个问题通过合并项目的两个组件来实现。一方将rgb描述为从0到1的浮点数,另一方使用从0到255的整数。(这是一个Java项目)我只是想,也许会有一个通用的解决方案,或者至少类似这样的问题。我想这不仅发生在rgb值。 –

回答

1

虽然它可能不是最有效的方法,但将所有三个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; 
} 

为了获得其它值时,简单地用16替换24换档为绿色,8为蓝色,0为阿尔法。

存储三个字符也可以正常工作。字符串使用的内存比需要的多得多。但是,真的,你存储了多少种颜色?您的应用程序是否使用了很多以至于存储空间都很重要?如果不是,可能不需要担心。

+0

我曾在一个应用程序中控制镇上的彩色闪电,每个用户都可以插入他想要的颜色,所以它取决于用法,但我想这不是错误的想法,因为数据发送互联网。我不想用尽用户流量中不必要的流量。 那么你如何读取那个整数的rgba值呢? –

+0

@SebastianWeiß除非你的小镇有成千上万的人,否则我怀疑你用来存储颜色的格式会有很大的不同。我编辑了答案,提供了一个获取颜色的例子。 – Straw1239

+0

真的很喜欢你的答案:)谢谢!我知道差异很小,但如果有一种有效的方法,为什么不使用它? :) –