如何用乙個浮點數來表示乙個RGB顏色?

時間 2021-05-05 16:37:55

1樓:露公尺 Lumi

主要根據 @楊樹下的狐狸 的回答,做出了一些小調整。

半浮點數的格式主要由三部分組成。其中有乙個符號位表示半浮點數的正負。小數部分是省略了小數點前的1。

而指數部分是通過移碼 + 15來構成。半浮點數的指數範圍是-14到+15。

假設R使用小數部分的最低五位來儲存,G使用小數部分的高五位。B的話,B的最高位用浮點數的符號位,低四位用指數,我們把低四位的0~15的值對映到指數的-8~7,也就是減8。

hfloat packed_num;

*(reinterpret_castpacked_num)

= ((B&0x10)<<15) + (((B&0x0F)-8 + 15)<<14)+ (G << 5) + R

upack的話,

B的值我只能想到通過試除,不考慮符號,如果packed_num在1~2之間,說明指數是0,如果在2-4之間說明是1,以此類推。當然要考慮上面的對映的偏移-8. 通過二分法的試除,我們可以在5次if判斷內就可以判斷出B的低四位。

然後再根據packed_num的符號,來把剛才的到的B的值+16或者不變。

G和R的值都很簡單。把B的低四位值確定之後,通過乘以B的低四位的2的冪來消除packed_num的冪,並且消除符號位。 然後剩下的就是移位取整了。

hfloat c = abs(packed_num)

if (c < 1.0f) elsec = c * 2^exp_finded //

B = exp_finded + 8 + (packed_num < 0 ? 16 :0)

c = (c-1)*32

R = floor(c)

c = (c-R)*32

G = floor(c)

不過如此多的分支測試,我真的不覺得這是一種好的辦法。嵌入式GPU我不知道,但是NV的GPU的話,分支太多會嚴重影響效能吧。

2樓:

剛剛想了一下這樣 pack

但是。。。

額。。最後搞了半天,發現不知道怎麼 unpack 了。。。5 位 exponent , 10 位是小數

最前面那位是符號。

但是,有個坑是 5位 exponent 全為零的時候。

這個是 subnormal numbers:

和 normal 部分 exponent offset 不同,感覺會很蛋疼。

所以,我想把 R pack 到 fraction 的最低的 5 位

G pack 到 fraction 的高 5位

而B 的話,感覺就麻煩了。。。

因為要丟掉 exponent 為 00000 的 subnormals 和為 11111 的 inf

首先是 exponent 00001 到 11110 一共是 30 種組合

再加上 signed 那一位 , 要湊出 32 種,是夠了的

最後得到的數是 f3

下面的 R,G,B都是 5 bits 的哈

(1)pack R

f1 = (1+R / (2^10))*2^(-14)

(2)pack G

f2 = f1 + G / 2^(5) * 2^(-14)

(3) pack B --- ugly

很麻煩B == 0 , f3 = -f2

B == 31, f3 = - f2 * 2^30

其他情況:

f3 = f2 * 2^B

然後。。。

我發現,我根本沒法 unpack 出來。。。

坐等前排佔位的 GPU 大牛。。。晚安

3樓:

位數一樣的情況下,浮點和整型所能表示的灰階總數是一樣的。強行轉浮點損失精度是必然的。我覺得問題的突破點不在這裡。

1. 你的所有RGB值都是0~255均勻分布嗎?假設R值只存在於0~127範圍內,那是不是可以進行進一步壓縮?

2. 影象可以壓縮嗎?你不一定要把每乙個畫素的RGB值都傳過去。

C 如何判斷乙個浮點數為0

據說他姓feng 在 標頭檔案裡頭,定義了幾個變數 FLT EPSILON 1E 5 or smallerDBL EPSILON 1E 9 or smallerLDBL EPSILON 1E 9 or smaller精確的0,在浮點數的標識範圍內。不那麼精確的0,可以以上面3個變數為參照比較參照值。...

如何構造乙個無理數來實現超級壓縮?

as藍月兒 無理數很多,都擺著,不用構造。現在最大的問題是我們的理論就是認為資訊是有最小單位的,而且資訊還必須以物質為載體可以直接認為資訊的多少可以論斤來稱量。 kimmking 找不到可用演算法,讓乙個1k位元組的隨機檔案可以有乙個簡單的無理數表示。如果有的話,現在的位元幣挖礦就不存在了。進一步,...

如何去向乙個男生表示喜歡

情緒由她撫摸 對他好咯,但要確定自己是不是只是暫時的好感,我前任就是對我好,好到我慢慢愛上她,然後吵架分手了,直到現在我也不清楚她到底現在還愛不愛我,反正我沒放下。一定不要衝動,確定好他是你真正喜歡的。 不用表示,喜歡這種東西,大多男生很敏感的,因為我們都自戀。如果喜歡你,你自然的乙個眼神也是明眸山...