摘要:[C#][Windows Phone] 擷取圖片主要顏色 (Palette)
Android (AOSP) 提供了 Palette 調色盤,讓開發者可在程式中擷取圖片的主要顏色
我參考了 AOSP 的原始碼,並調整了部分程式區段,改寫成 C# 版本
使用方法 (亦可直接參考 DemoColorPageViewModel.SetDemoItem())
1. 先將圖片讀取成 WriteableBitmap 物件
WriteableBitmap writeableBitmap = await BitmapFactory.New(1, 1).FromContent(imageUri);
2. 透過 Palette 物件,產生調色盤
Palette palette = await Palette.Generate(writeableBitmap);
3. Palette 物件提供了取得圖片主要顏色的幾種方法,並可在參數中帶入若取色失敗時預設的顏色
取得主要顏色
palette.getMainColor(Colors.Transparent)
取得主要暗色
palette.getDarkMainColor(Colors.Transparent)
取得亮彩色
palette.getVibrantColor(Colors.Transparent)
取得亮彩淺色
palette.getLightVibrantColor(Colors.Transparent)
取得亮彩深色
palette.getDarkVibrantColor(Colors.Transparent)
取得粉彩色
palette.getMutedColor(Colors.Transparent)
取得粉彩淺色
palette.getLightMutedColor(Colors.Transparent)
取得粉彩深色
palette.getDarkMutedColor(Colors.Transparent)
除此之外,我還加入了根據背景顏色換算相似顏色或相反顏色的功能 (可參考 DemoColorPage.xaml)
可將 ColorSimilarConverter 作為 Converter 以取得相似顏色
<textblock text="{Binding ElementName=TextSample2Brush, Path=Color, Converter={StaticResource colorToStringConverter}}" fontsize="18">
<textblock.foreground>
<solidcolorbrush x:name="TextSample2Brush" color="{Binding ElementName=backgroundSolidColorBrush, Path=Color, Converter={StaticResource colorSimilarConverter}}">
</solidcolorbrush></textblock.foreground>
</textblock>
亦可直接透過 ColorUtils.SimilarColor 方法取得相似顏色
ColorUtils.SimilarColor(originBrush.Color)
將 ColorDiffConverter 作為 Converter 以取得相反顏色
<TextBlock Text="{Binding ElementName=TextSample1Brush, Path=Color, Converter={StaticResource colorToStringConverter}}" FontSize="18">
<TextBlock.Foreground>
<SolidColorBrush x:Name="TextSample1Brush" Color="{Binding ElementName=backgroundSolidColorBrush, Path=Color, Converter={StaticResource colorDiffConverter}}"/>
</TextBlock.Foreground>
</TextBlock>
透過 ColorUtils.SimilarColor() 方法取得相反顏色
ColorUtils.SimilarColor(originBrush.Color)
本專案需引用 WriteableBitmapEx 函式庫 (From NuGet)
歡迎自行取用、修改
原始碼 (Windows Phone 8.1): https://github.com/renewal-wu/PaletteSample