在WPF中高效地显示图像上的文本?

在WPF中高效地显示图像上的文本?,wpf,image,text,Wpf,Image,Text,如何在图像上显示文本,使其始终可见(因为图像颜色混合且不可预测) 我考虑了两种选择: 使文本边框为白色,而文本本身为黑色 与图片相反的文本显示 首选第一种方案,因为它看起来更坚固 嵌入文本很简单: <Grid> <Image Source="{Binding ImageLink}" Width="110" /> <TextBlock Text="{Binding Description}" HorizontalAlignment="Center"

如何在图像上显示文本,使其始终可见(因为图像颜色混合且不可预测)

我考虑了两种选择:

  • 使文本边框为白色,而文本本身为黑色
  • 与图片相反的文本显示
  • 首选第一种方案,因为它看起来更坚固

    嵌入文本很简单:

    <Grid>
      <Image Source="{Binding ImageLink}" Width="110" />
      <TextBlock Text="{Binding Description}" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" />
    </Grid>
    
    
    
    最新情况:

    听起来是个不错的主意,只是行不通

    我尝试了你的代码,结果如下:


    左图是当我将
    Color
    属性设置为
    White
    ShadowDepth
    设置为
    10
    时,使文本更加突出或对比的最佳方法是使用任何效果,尤其是着色器效果。 自.NET3.5SP1以来,Microsoft也已淘汰位图效果,因此最好使用任何着色器效果或创建自己的效果

    例如(),您可以使用DropShadowEffect“勾勒”文本,但将阴影深度设置为0:

    <Grid>
         <Image Source="{Binding ImageLink}" Width="110" />   
         <TextBlock Text="{Binding Description}" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center">
             <TextBlock.Effect>
                 <DropShadowEffect ShadowDepth="0" Color="Blue" BlurRadius="10" />
             </TextBlock.Effect>
         </TextBlock> 
    </Grid> 
    
    
    
    有关更多示例,您可以使用谷歌WPF特效

    更新:您还可以使用文本选项的附加属性关闭文本的抗锯齿功能。TextRenderingMode并将其设置为“锯齿”,或者您也可以使用文本选项。TextFormattingMode并设置为“显示”

    试着比较一下,看看是否适合您的需要:

    <StackPanel>
        <TextBlock>
            Hello World ...  Ideal text formatting
        </TextBlock>
        <TextBlock TextOptions.TextFormattingMode="Display">
            Hello World ... Display text formatting
        </TextBlock>
    </StackPanel>
    
    
    你好,世界。。。理想的文本格式
    你好,世界。。。显示文本格式
    

    希望这有帮助。

    我做了这件事,它有助于:

    <Style x:Key="AnnotationStyle" TargetType="TextBlock">
      <Setter Property="Background" Value="#70FFFFFF" />
      <Setter Property="FontWeight" Value="Bold" />
      <Setter Property="HorizontalAlignment" Value="Center"/>
      <Setter Property="VerticalAlignment" Value="Center"/>
      <Setter Property="TextAlignment" Value="Center"/>
      <Setter Property="TextWrapping" Value="Wrap"/>
      <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
          <Setter Property="Background" Value="#CCFFFFFF" />
        </Trigger>
      </Style.Triggers>
    </Style>
    
    ....
    
    <TextBlock ... Style="{StaticResource AnnotationStyle}"/>
    
    
    ....
    
    下面是它的样子:

    更新后的评论,不,在黑色背景下仍然无法识别(我尝试将阴影颜色设置为白色,但没有帮助)。我决定采取不同的方法,这可能会降低性能成本。