我遇到了一个非常奇怪的事情: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),它们会被拉伸到853 * 640(原始尺寸为1.33 *),因此显示为拉伸/模糊。 (但是,这种情况下,滚动树到最后工作正常,没有渲染问题) 树中的渲染图像(24位bmp)(半角):
这是什么行为,为什么?简单地更改源图像的位深度为什么会更改渲染图像的尺寸?
答案 0 :(得分:0)
好吧,我遇到了问题:WPF默认DPI是96,而我的位图是72.除了8位和4位,这些都是未指定的(这种情况下考虑默认的96)。 我将位图转换为96dpi,并且不再调整大小。 有关详细信息,请参阅问题下的评论。