2016-02-02 32 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

真的很喜歡你的答案:)謝謝!我知道差異很小,但如果有一種有效的方法,爲什麼不使用它? :) –