【发布时间】:2021-05-01 14:27:39
【问题描述】:
我的问题比编程更通用,但是涉及到一些基本的C代码,希望不要在这里结束。
我有一个圆形的目标显示器,它将显示一个图像,首先居中并拟合:
圆的半径是 360,这是固定的。
我需要添加放大和缩小功能(以防图像大于目标)。在这个例子中,上面的图像是1282x720,所以它远高于圆圈的大小。 (为了适应圈子,现在大致是313x176)
我想做一个正确对齐的“中心固定缩放”,即:当前居中的任何内容都应在缩放操作后保持居中。
图像被放入名为 scroller 的组件中,该组件具有设置其 偏移量 的选项,即从其内容的顶部和左侧跳过多少像素。默认情况下,此滚动组件将其内容对齐到左上角。
我在图片中间放了一个红点,以便于观察。
所以在放大时会发生这种情况(图像开始左对齐):
请注意它仍然在垂直的中间,因为它的高度仍然比它的容器小。
但是在下一个放大步骤中,红色中心点会稍微向下,因为在这种情况下,图像的高度比容器高,因此它也开始顶部对齐:
现在,让它始终保持在中心很容易:
我需要让滚动条滚动到
image_width/2 - 180, //horizontal skip
image_height/2 - 180 //vertical skip
在这种情况下,如果我从适合尺寸放大到完整尺寸的 5 步,滚动条的跳过数字是:
Step0 (fit): 0, 0
Step1: 73, 0
Step2: 170, 16
Step3: 267, 71
Step4: 364, 125
Step5 (original size): 461, 180
但我不希望图像始终保持在中心,我宁愿做一些类似于图像编辑器正在做的事情,即:在缩放操作期间中心点应保持在中心,而不是用户可以平移和下一次缩放操作将使新的中心点保持在中心。
我该怎么做?
目标语言是 C,并且没有可用的额外 3rd 方库,我需要手动完成。
Scroller 实际上是一个elm_scroller。
【问题讨论】:
-
我认为这是一个非常有趣的问题,但不幸的是,如果没有一些关于您正在编程的语言的上下文,我认为它有点模糊。例如,C# WPF 将这个煮沸的做法变得非常简单
ScaleTransform,您可以在其中告诉它比例因子并定义一个中心点(例如 X=50%,Y=50%)。如您所述,Python 可能需要一些 3rd 方成像库和一些手动代码。对于经验不足的程序员来说,C 语言显然更具挑战性,因为它甚至需要实现一些基本概念,比如中心点的概念等。 -
语言是C,我补充一下。而且没有可用的库,只能手动计算。
-
您能否也发布一个
scroller是什么的示例或模型?您是否有能力更改该控件的代码?这很可能会改变人们提供答案和反馈的方式。 -
Scroller 实际上是一个
elm_scroller,基本上它只是一个容器,它可以随内容扩展并通过滚动条使其“可滚动”。 -
这个好像不太好。让我们只考虑宽度:在原始情况下居中:
1282是宽度,461是偏移量。小一号:1088宽度和364偏移量。计算比例:1088/1282 ~ 0.8487。新偏移量的计算:0.8487*461 ~ 391。而不是 364。