【问题标题】:DeviceInformation.GetGlyphThumbnailAsync always get dark theme thumbnailDeviceInformation.GetGlyphThumbnailAsync 总是得到深色主题缩略图
【发布时间】:2017-03-13 14:02:19
【问题描述】:

我是 UWP 的新手,尝试访问缩略图,我得到深色主题图像。 App.xaml 请求的主题很轻

.cs
     DeviceThumbnail deviceThumbnail = await DeviceInformation.GetGlyphThumbnailAsync();
                var glyphBitmapImage = new BitmapImage();
.xaml
     <Image Source="{x:Bind GlyphBitmapImage, Mode=OneWay}" Stretch="UniformToFill" RequestedTheme="Light" Grid.Column="0" Height="40" Width="40" Margin="5" VerticalAlignment="Top"/>

请帮我解决。

如果 Windows 10 浅色主题,我可以看到将图像设置为

【问题讨论】:

    标签: xaml uwp


    【解决方案1】:

    大多数系统图像仅作为透明背景上的纯白色图像存在。这是您拨打GetGlyphThubnailAsync() 时看到的内容。

    由于这些图像仅包含一种颜色和一个 Alpha 通道,因此如果您需要不同的版本(例如不同的颜色),它们很容易操作。

    将返回的缩略图更改为白底黑字的最简单方法是使用WriteableBitmapEx 中的Invert() 方法。
    假设这个 XAML:

    <Image x:Name="GlyphImage" />
    <Image x:Name="InvertedGlyphImage" />
    

    它们可以这样填充:

    var thumbnail = await deviceInfo.GetGlyphThumbnailAsync();
    
    var regular = new BitmapImage();
    regular.SetSource(thumbnail);
    
    GlyphImage.Source = regular;
    
    var wb = new WriteableBitmap(regular.PixelWidth, regular.PixelHeight);
    var newWb = await wb.FromStream(thumbnail);
    
    InvertedGlyphImage.Source = newWb.Invert();
    

    并会产生如下输出:

    我还注意到您在用于显示的图像上设置了RequestedTheme 属性。请注意,此属性告诉 FrameworkElement 在呈现其 UI 时使用哪种系统样式。这不会对您显示的位图产生任何影响。

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 1970-01-01
      • 2012-09-29
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2022-08-12
      相关资源
      最近更新 更多