【发布时间】:2020-11-15 06:27:49
【问题描述】:
我正在使用 Kivy 框架在 Python 中开发一个 GUI。我的 GUI 包含一个 windrose,其中一个箭头(包含在 png 图像中)围绕一个圆圈旋转以指示当前的风向。风玫瑰是圆形的,但是因为我使用的屏幕有非方形像素,风玫瑰的实际大小是 134 像素宽 x 145.940594 像素高。考虑到非方形像素需要在垂直方向应用的因子是 220/202 = 1.089108。
这是我必须旋转包含在 png 文件(尺寸为 134 像素 x 134 像素)中的箭头的代码的 sn-p:
<WindSpeedPanel>: # This WindSpeedPanel has dimensions of 262 pixels wide by 220 pixels high
AnchorLayout:
pos_hint: {'x': 65/262, 'y': 26/202}
size_hint: (134/262, 134/202)
anchor_x: 'center'
anchor_y: 'center'
Image:
source: 'icons/windRose/arrow.png'
size_hint: (1, 1)
keep_ratio: 0
allow_stretch: 1
canvas.before:
PushMatrix
Rotate:
angle: -app.windDir
axis: 0, 0, 1
origin: self.parent.center
canvas.after:
PopMatrix
我面临的问题是,当图像旋转(例如旋转 90 度)时,它会变成椭圆形,因为考虑到非方形像素需要进行宽度/高度缩放:
我可以解决旋转的两个小问题
- 0 度或 180 度(无需缩放)
- 90 度或 270 度(宽度乘以 220/202,高度乘以 1/(220/202) - 即简单地交换尺寸)
目前,我无法解决所有中间角度所需的缩放问题。我尝试了各种带有正弦/余弦的方程来计算必要的宽度/高度比例因子,但似乎没有任何效果。我总是最终将旋转的 png 图像压缩/拉伸成椭圆。例如,在没有应用缩放的 45 度时,我看到:
有没有人知道我应该如何计算必要的宽度/高度比例因子以确保 png 图像在不考虑旋转角度的情况下保持圆形?
【问题讨论】:
标签: python image user-interface kivy