2015-05-01 89 views
3

我有一個方法可以處理位圖中的所有像素(表示爲Byte數組)。對於每個像素,我使用float來存儲計算值,直到最終將其轉換回Byte(僅使用演員陣容,並且我確定float中的值將會用於每個R,G和B值始終爲255.0或更低)。如何(快速)將float轉換爲Byte?

在試圖優化這種方法時,我驚訝地發現大約80%的總處理時間來自於將R,G和B的三個float值轉換爲Byte對應值。

有什麼樣的做這個(例如)的超快速的方式:

float Rtotal = 123.7; 
float Gtotal = 7.3; 
float Btotal = 221.3; 

Byte Rsource = (Byte)Rtotal; 
Byte Gsource = (Byte)Gtotal; 
Byte Bsource = (Byte)Btotal; 

回答

3

好吧,這是一個有點奇怪。如果我只是讓這種變化:

float Rtotal = 123.7; 
float Gtotal = 7.3; 
float Btotal = 221.3; 

Byte Rsource = (int)Rtotal; 
Byte Gsource = (int)Gtotal; 
Byte Bsource = (int)Btotal; 

造成投給​​額外的時間消失。我的猜測是,編譯器正在爲​​類型轉換添加某種邊界檢查,以確保它處於字節的有效範圍內,而如果轉換爲int,則會省略此操作。