由于图像XAML中的dpi差异,画布中的项目与计算位置不匹配

问题描述

我在将正方形放置在包含图像的Canvas的正确位置时遇到问题(从API接收为byte [])。确实显示了一些矩形,有些矩形有些偏斜,有些则完全偏斜,甚至没有达到应有的水平。

<Viewbox>
        <Canvas Height="{Binding ActualHeight,ElementName=img}" Width="{Binding ActualWidth,ElementName=img}">
            <Image Name="img" Source="{Binding Image.Image,ElementName=uc}" Stretch="None" />
            <Rectangle Canvas.Left="{Binding Image.ImageAttributes.Rect.X,ElementName=uc}" Canvas.Top="{Binding Image.ImageAttributes.Rect.Y,ElementName=uc}" Visibility="{Binding ShowBox,Converter={StaticResource BoolToVisibilityConverter} }" Width="{Binding Image.ImageAttributes.Rect.Width,ElementName=uc}" Height="{Binding Image.ImageAttributes.Rect.Height,ElementName=uc}" Stroke="Red" StrokeThickness="1">
                <Rectangle.LayoutTransform>
                    <RotateTransform Angle="{Binding Image.ImageAttributes.Roll,ElementName=uc}"/>
                </Rectangle.LayoutTransform>
            </Rectangle>
            
        </Canvas>
    </Viewbox>

起初我以为可能是因为我从API获取错误的数据值或后端出现问题。经过一天多的调试,我终于弄明白了,这是由于图像中的DPI所致。例如: 假设正常情况下,某些图片尺寸为300 x 450,但是以xaml为单位,实际的height / actualWidth设置为400x600。这是因为图像的dpi为72,而xaml中的默认dpi似乎是96(300/72 * 96 = 400)。但是Rectangle并没有考虑到图像尺寸已更改并且应在其应绘制的位置绘制的事实(例如,DB中的绝对值应为:X:30,Y:45,Height:90,Width:90更改尺寸后,以X:40,Y:60,Height:120,Width:120绘制)。

我的问题是:有什么方法可以在显示图像之前将dpi标准化或在将其发送到要处理的API和添加到数据库中之前对其进行标准化? 如果没有,如何调整大小或获得dpi差异以计算Canvas中其他项目的新值?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)