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

Image size in TreeView depends on image color bit depth

我遇到了一件非常奇怪的事情: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。 (但是,如果树中有更多图像,将树滚动到末尾会导致渲染问题,请参阅:) 树中的渲染图像(8 位 bmp)(一半大小):

但是,如果我更改为 24 位或 32 位图像 (bmp/png/jpg),它们将被拉伸为 853*640(1.33 * 原始大小),因此显示 strecthed/blurred。 (但是,在这种情况下,将树滚动到末尾效果很好,没有渲染问题) 树中的渲染图像(24 位 bmp)(一半大小):

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

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