用於創建RGB數字的公式是這樣的:如何將此整數分解爲其原始值?
R (value between 0-100) + G (value between 0-100) * 1000 + B (value between 0-100) * 1000000
這導致類似:8017035
我怎麼能轉換這個值恢復到原來的3個變量的值?
使用和esp8266
運行這段代碼
用於創建RGB數字的公式是這樣的:如何將此整數分解爲其原始值?
R (value between 0-100) + G (value between 0-100) * 1000 + B (value between 0-100) * 1000000
這導致類似:8017035
我怎麼能轉換這個值恢復到原來的3個變量的值?
使用和esp8266
運行這段代碼
有幾個方法可以做到這一點。
爲了找到R,你可以模1000的其餘部分將是R.
爲了找到G,你可以模百萬,減去R,並通過1000除以模數將刪除B值,然後減去R(你已經發現了),你會留下剛剛G * 1000
要找到B,你可以減去R和G,然後由1000000
劃分這會給你正確的結果在R,G或B爲100的情況下.CoryKramer當前的最佳答案將會循環並告訴你該數字爲0,即使它是100也是如此。
這是正確的,CoryKramer先前的回答沒有考慮到100個值。 – Sam
方式不盡相同,但模量,而不是乘法。
int color = 8017035;
int r = color % 100;
int g = (color/1000) % 100;
int b = (color/1000000) % 100;
For example,這裏的值將如何往返
哇, 非常感謝您的快速回復!您的代碼完美無缺。我不知道這是如此簡單。 謝謝! – Sam
現在你明白了爲什麼我們通常爲每個顏色值使用8位,如'#define COLOR(r,g,b)((((b)&0xff)<< 16)+(((g)& 0xff)<< 8)+((r)&0xff))' –
@MichaëlRoy爲什麼宏,但? – LogicStuff
@LogicStuff這是因爲宏在這些小注釋部分中讀起來更容易一些。 –