2016-02-27 72 views
0

我使用v7.Palette Api提取圖像顏色,但提取的顏色差不多是50%不準確,我想從圖像中提取最突出的顏色。我使用的代碼爲調色板API提取的顏色不準確

final Palette palette = Palette.from(source).generate(); 
       if (palette != null) { 
        Palette.Swatch vibrant; 
           palette.getDarkMutedSwatch() : 
           palette.getLightMutedSwatch(); 
           palette.getMutedSwatch();               palette.getDarkVibrantSwatch() : 
           palette.getLightVibrantSwatch(); 
           palette.getVibrantSwatch(); 
} 

我嘗試了所有的方法,但沒有準確對50%以上的提取的顏色。

有沒有辦法做到這一點?

回答

1

Palette類不是爲了準確地從圖像中提取像素顏色而製作的,而是其目的是爲了提供僅用於UX目的且美學上令人愉悅的一組顏色。

,你唯一可以做的事情是:

  1. 增加由Palette算法使用的顏色數量。
  2. 增加圖像最大尺寸縮小到的尺寸。

您可以生成調色板之前調整的建設者設置:

final Palette palette  
    = Palette 
     .from(source) 
     .maximumColorCount(numerOfColors) 
     .resizeBitmapSize(bitmapLargestDimension) 
     .generate(); 

當心即產生調色板很貴吧!
您正在使用同步版本,即阻止調用線程,請確定您正在做什麼,特別是如果您增加上述設置。


有關信息的目的只有,這裏的什麼呢Palette總結。

我找不到Palette類的最新的源代碼,我認爲一些原本在Palette的代碼已經被重構爲Palette.Builder

如果你看一下generate方法的source code你會看到

  1. ,以便其最大尺寸配合100個像素(默認)
  2. 的圖像是量化的圖像進行按比例縮小以便顏色數量爲16(默認情況下)

量化器不返回圖像,而是包含在名爲的類中的剩餘顏色列表(它比簡單的int提供更多的語義)。

之後調色板的一個實例是建立和配置文件樣本(充滿活力,充滿活力的黑暗,充滿活力的燈光,柔和,靜音黑暗,靜音輕)由quantizier返回的樣本中搜索。

配置文件定義了saturation and luma的可接受值範圍以及理想的飽和度和亮度值。
通過查找屬於配置文件範圍內的色板來執行搜索。

由於多個色板可匹配,所以計算加權函數。
這樣的函數給飽和度和亮度值更接近理想值並代表更多像素的色板提供了更高的分數。
飽和度匹配帳戶兩次作爲亮度匹配帳戶的三倍作爲人口計數。


量化不通過(從去到每像素24位每像素4位如),而是降低了色彩空間,但平均顏色(沿最大尺寸),直到其數量工作由低於或等於給定的閾值。
ColorCutQuantizier source

+0

我這樣做在一個線程,這就是爲什麼我把它稱爲同步@margaret –

+0

@ankitagrawal好 –

+0

,但我需要一個方法來獲得最精確的顏色對市場上的一些應用程序確實是 –