private static Color GetThemedColor(int colorThemeIndex, double tintAndShade, Document doc) { // translate from wdThemeColorIndex to MsoThemeColorSchemeIndex MsoThemeColorSchemeIndex colorSchemeIndex = ThemeIndexToSchemeIndex(colorThemeIndex); // get color scheme by this index and take its RGB property, but this RGB still OLE RGB - i.e. BGR -> need to convert it to real RGB, i.e. use ColorTranslator.FromOle() and ToArgb after OfficeTheme theme = doc.DocumentTheme; ThemeColorScheme scheme = theme.ThemeColorScheme; ThemeColor color = scheme.Colors(colorSchemeIndex); int colorSchemeRGB = ColorTranslator.FromOle(color.RGB).ToArgb(); Marshal.ReleaseComObject(color); Marshal.ReleaseComObject(scheme); Marshal.ReleaseComObject(theme); // do RGB -> HSL translation to apply tint/shade HSL colorSchemeHSL = RGBtoHSL(colorSchemeRGB); // apply it if (tintAndShade > 0) { colorSchemeHSL.L += (1 - colorSchemeHSL.L) * tintAndShade; } else { colorSchemeHSL.L *= 1 - Math.Abs(tintAndShade); } // do backward HSL -> RGB translation int tintedAndShadedRGB = HSLtoRGB(colorSchemeHSL); return(Color.FromArgb(tintedAndShadedRGB)); }
/// <summary> /// Lấy màu Solid Color /// </summary> /// <param name="themeColor"></param> /// <param name="index"></param> /// <returns></returns> public Core.Model.SolidColor GetSolidColor(ThemeColorScheme themeColor, MsoThemeColorSchemeIndex index) { Core.Model.SolidColor solid = new Core.Model.SolidColor(); solid.Brightness = 1; solid.Color = ConvertColor(themeColor.Colors(index).RGB); switch (index) { case MsoThemeColorSchemeIndex.msoThemeDark1: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounDark1").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounDark1").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeLight1: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounDark2").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounDark2").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeDark2: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounLight1").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounLight1").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeLight2: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounLight2").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_BackgrounLight2").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeAccent1: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent1").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent1").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeAccent2: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent2").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent2").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeAccent3: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent3").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent3").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeAccent4: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent4").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent4").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeAccent5: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent5").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent5").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeAccent6: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent6").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_Accent6").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeHyperlink: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_Hyperlink").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_Hyperlink").ToString(); break; case MsoThemeColorSchemeIndex.msoThemeFollowedHyperlink: solid.Name = System.Windows.Application.Current.TryFindResource("ColorGallery_FollowedHyperlink").ToString(); solid.SpecialName = System.Windows.Application.Current.TryFindResource("ColorGallery_FollowedHyperlink").ToString(); break; default: break; } return(solid); }