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,并且不再调整大小。
详情请见问题下的评论。
我遇到了一件非常奇怪的事情: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。
(但是,如果树中有更多图像,将树滚动到末尾会导致渲染问题,请参阅:
但是,如果我更改为 24 位或 32 位图像 (bmp/png/jpg),它们将被拉伸为 853*640(1.33 * 原始大小),因此显示 strecthed/blurred。 (但是,在这种情况下,将树滚动到末尾效果很好,没有渲染问题) 树中的渲染图像(24 位 bmp)(一半大小):
这是什么行为,为什么?简单更改源图像的位深度为什么会更改渲染图像尺寸?
好的,我遇到了问题:WPF 默认 DPI 是 96,而我的位图是 72。除了 8 位和 4 位外,这些都未指定(在这种情况下考虑默认 96)。 我将位图转换为 96dpi,并且不再调整大小。 详情请见问题下的评论。