我遇到一个很奇怪的事情:一个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)在树(半尺寸):
然而如果我改变到24或32位图像(BMP/PNG/JPG),它们被strecthed到853 * 640(1.33 *原始尺寸),这样显示strecthed /模糊。 (但是,这种情况下,滚动树到底能正常工作,没有渲染问题)树 渲染图像(24位BMP)(一半大小):
这是什么行为,为什么?简单地改变源图像的位深度为什么改变渲染的图像尺寸?
我认为这可能是原因:'其实,我已经看到了定期与PNG图像。看起来,PNG的默认分辨率是72dpi,而WPF的默认屏幕分辨率是96dpi。 WPF试图通过将png位图缩放到像素大小的133%来考虑这一点,这在技术上是正确的,但通常不是用户想要的。您可以使用GIF或JPG代替,也可以将图像与LayoutTransform它扩展到它的大小为0.75组合,或只是坚持与设置图像控制explicitly.'的大小 – Zotyi