[C#][Windows Phone] 擷取圖片主要顏色 (Palette)

摘要:[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