TreeView中的图像大小取决于图像颜色位深度

时间:2016-08-03 15:05:57

标签: wpf image bitmap treeview treeviewitem

我遇到了一个非常奇怪的事情:TreeView包含在XAML中以这种方式声明的项目(图像):

<ControlTemplate x:Key="ImageTemplate">
    <Image VerticalAlignment="Top" 
           Visibility="{Binding IsImageVisible,Converter={StaticResource BoolToVisibility}}"
           RenderOptions.BitmapScalingMode="NearestNeighbor"
           SnapsToDevicePixels="True"
           Stretch="None">
        <Image.Source>
            <BitmapImage UriSource="c:\\imageBMP4.bmp" />
            <!-- <BitmapImage UriSource="c:\\imageBMP8.bmp" /> -->
            <!-- <BitmapImage UriSource="c:\\imageBMP24.bmp" /> -->
            <!-- <BitmapImage UriSource="c:\\imageBMP32.bmp" /> -->
            <!-- <BitmapImage UriSource="c:\\imagePNG8.png" /> -->
            <!-- <BitmapImage UriSource="c:\\imagePNG24.png" /> -->
            <!-- <BitmapImage UriSource="c:\\imagePNG32.png" /> -->
            <!-- <BitmapImage UriSource="c:\\imageJPG24.jpg" /> -->
        </Image.Source>
    </Image>
</ControlTemplate>

所有图像均为640 * 480,填充蓝白色水平1像素线。

我所经历的,如果我使用4位或8位位图(bmp),它们会在屏幕上呈现精细,像素到像素,在树中大小为640 * 480。 (但是,如果树中有更多图像,则将树滚动到最后会导致渲染问题,请参阅:TreeView/ScrollView rendering bug with bitmaps?) 树中的渲染图像(8位bmp)(半角):

enter image description here

但是如果我改为24或32位图像(bmp / png / jpg),它们会被拉伸到853 * 640(原始尺寸为1.33 *),因此显示为拉伸/模糊。 (但是,这种情况下,滚动树到最后工作正常,没有渲染问题) 树中的渲染图像(24位bmp)(半角):

enter image description here

这是什么行为,为什么?简单地更改源图像的位深度为什么会更改渲染图像的尺寸?

1 个答案:

答案 0 :(得分:0)

好吧,我遇到了问题:WPF默认DPI是96,而我的位图是72.除了8位和4位,这些都是未指定的(这种情况下考虑默认的96)。 我将位图转换为96dpi,并且不再调整大小。 有关详细信息,请参阅问题下的评论。