问题描述
我在将正方形放置在包含图像的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 (将#修改为@)