2012-11-05 65 views
0

我正在爲android編寫高斯濾波器。使高斯濾波器對可變顏色深度穩健

根據本教程的GaussFilter例如:http://www.jhlabs.com/ip/blurring.html我編輯我的ALPHA值這樣

alpha += f * ((pixelValue >> 24) & 0xff); 

根據此主題: Using logical bitshift for RGB values

(pixelValue >>24 & 0xff); 

不等同於

Color.alpha(pixelValue); 

As據我所知,alpha通道在RGB中是可選的。 所以這取決於我如何閱讀和編輯alpha和rgb的價值。

有許多不同的顏色深度的組合,例如:(?)

  • 4位無alpha
  • 4比特+ 4位alpha
  • 24位包括α
  • 麥金塔提供24位加(或包括?)8位阿爾法

由於我不知道用戶想要處理哪種類型的圖像, o抓住所有的組合。我只是使用Color.Red(value),Color.Green(value)...但我不確定這到底是否會太慢?在處理之前,我可以將每個輸入轉換爲24位位圖,但這會花費太長時間。

任何幫助表示讚賞,謝謝。所有的

回答

0
  1. 首先,如果你擔心性能,你應該實現它和衡量。

  2. 如果你想要最快的實現,你幾乎必須專門爲每個像素格式。但很可能你只需要處理一個,見下文。

  3. 在另一方面,假設你加載你的位圖作爲Bitmap類的實例,也有剛剛4個可能的像素格式,並且ARGB_8888可能是你應該關心的(也許RGB_565太只有一個,但我不希望具有這種小像素每像素值的良好模糊效果)。實際上,根據BitmapFactory.Options文檔,默認情況下,位圖會加載ARGB_8888配置。換句話說 - 使用標準的Android位圖處理API,您不需要進行任何轉換,只需指定您需要的格式。

  4. 其實(pixelValue >>24 & 0xff);Color.alpha(pixelValue);等於ARGB_8888像素格式,但它可以做得更好。

使用邏輯移位運算符(而不是>>,算術移位)你不需要& 0xFF操作可言,因爲位31..8始終爲0。看看如何實現Color.alpha()

public static int alpha(int color) { 
    return color >>> 24; 
} 
+0

那就是它。謝謝 :)。 – Goot

+0

歡迎你。還有什麼我可以解釋更多?有一個等待無論如何的賞金;) –

+0

我必須等待2個小時,直到你可以收到賞金;) – Goot