如何确定画布(具有一定宽度)的像素宽度?
我在 AnimatedImage 控件中有一个位图,并且我知道位图的宽度(以像素为单位),并且我想缩放位图以使其水平完全适合画布。我如何确定这个比例?
注意:我不需要使用 RenderTargetBitmap,因为位图已经加载。
在 WPF 中,单位是独立于设备的。计算单位实际像素大小的公式是:
每个 WPF 单元的像素 = ConstantWPFUnit 大小 * 监视器 DPI;
以像素为单位的元素大小 = 每个 WPF 单位的像素 * MyElement.ActualWidth
恒定的 WPF 单元大小为 1/96。如果我没记错的话,监视器 DPI 可以作为从 SystemInformation.GetPrimaryMonitor 或类似返回的类中的属性找到。
FrameworkElement 的 ActualWidth 采用与设备无关的单位,是布局发生后元素实际占用的宽度。只需将此属性乘以您在上面计算的每个 WPF 单位的像素,您就会得到答案。
但是,我怀疑您进行了很多手动编码。以任何所需方式拉伸图像和其他视觉元素通常可以简单地通过在相关控件/画笔上设置属性来完成。您是否尝试过为包含位图的元素制作 HorizontalAlignment="Stretch" 和 VerticalAlignment="Center"?