代码之家  ›  专栏  ›  技术社区  ›  Akash Kava

按钮模板无法清晰地渲染图像

  •  3
  • Akash Kava  · 技术社区  · 16 年前

    <Microsoft_Windows_Themes:ButtonChrome 
       x:Name="Chrome" 
       Background="{TemplateBinding Background}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       RenderDefaulted="{TemplateBinding IsDefaulted}" 
       RenderMouseOver="{TemplateBinding IsMouseOver}" 
       RenderPressed="{TemplateBinding IsPressed}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Image 
                   Source="{TemplateBinding ImageSource}" 
    
                   RenderOptions.BitmapScalingMode="NearestNeighbor"
    
                   SnapsToDevicePixels="True"
    
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                  Stretch="None"
                   />
            <ContentPresenter 
                Grid.Column="1"
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                Margin="{TemplateBinding Padding}" 
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                RecognizesAccessKey="True"/>
        </Grid>
    </Microsoft_Windows_Themes:ButtonChrome>
    

    现在你可以根据这个问题来看 My Images are blurry on StackOverflow 我试过。。

    RenderOptions.BitmapScalingMode="NearestNeighbor"
    

    在所有级别上,网格、镀铬。。并尝试了各种SnapsToDevicePixels组合,但图像无法正确显示。我将“拉伸”设置为“无”,图像在中心对齐,但为什么它会自动拉伸?

    这里是输出和它非常令人沮丧。

    Bad Image on WPF http://akashkava.com/blog/wp-content/uploads/2009/12/BadButton.PNG

    图像的实际大小是16x16,但我通过使用Windows Maginifier了解到,无论我做什么,图像实际上都试图渲染为20x20,对于较大的图像,它甚至会剪切最右侧和底部。我认为当Stretch=None时,图像应该正确渲染为16x16,有人能澄清这里的问题吗?

    5 回复  |  直到 9 年前
        1
  •  1
  •   Jay    16 年前

    这是一个已知的wpf问题,microsoft尚未修复。唯一的解决办法是调整大小,使其不会以分数像素部分的大小结束。

        2
  •  1
  •   Mike LaSpina    16 年前

    尝试在图像元素上设置显式的宽度和高度。

        3
  •  1
  •   user232583    16 年前

        4
  •  1
  •   Domokun    16 年前

    您可能想考虑在WPF4中尝试新的可用属性。离开 RenderOptions.BitmapScalingMode 高质量 或者干脆不申报。

    UseLayoutRounding="True" .

    以前仅在Silverlight中可用的属性现在修复了所有位图大小问题。:)

    请注意- 布局四舍五入的几个效果

    • 元素的宽度和/或高度最多可以增加或减少1个像素

    • 对象的放置最多可以移动1个像素

    • 1像素

    http://blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx

        5
  •  1
  •   Rob Fonseca-Ensor    16 年前

    如果您认为您的映像是16x16,但WPF似乎认为它是20x20,那么您可能在映像本身中存在DPI问题。你的图像是PNG吗?将其另存为jpg,然后查看其外观。

    http://www.hanselman.com/blog/BeAwareOfDPIWithImagePNGsInWPFImagesScaleWeirdOrAreBlurry.aspx