图片缩放动画的平滑处理

milk 2011-07-28 12:39:31
加精
要达成的目标: (举例)制作一个24帧的动画, 内容是一张图片, 尺寸从100*100变化到120*120, 要求做到平滑变化.

课题难点: 对于GDI或单纯的Bitmap操作来说, 无法直接处理浮点数坐标(不像OpenGL, DX等). 而我们要在24帧内变化20个像素点, 如果使用通常的方法, 必定有几帧所要展示的图片是完全相同的, 这就会造成动画的抽筋状(Jerkiness, 一种不平滑状态...).

解决方法参照物: 对于运动的平滑, 我已经通过使用双线性滤镜达到了一个可以接受的结果(虽然还不是很理想), 因为都是涉及浮点数的处理, 所以我想本问题是否也可以类似的操作(但我不知道具体方法).

我的提问: 如果大家有好的想法, 建议及意见, 或者直接的解决方式, 参考书目等, 请不吝赐教, 先谢过了!

...全文
3390 97 打赏 收藏 转发到动态 举报
写回复
用AI写文章
97 条回复
切换为时间正序
请发表友善的回复…
发表回复
YODOYODO 2011-08-03
  • 打赏
  • 举报
回复
你说的这个问题,你要是想靠写代码解决,那可是有点复杂。。。我曾经想做一个带动画效果的控件,遇到过这个问题最后没弄完。。。
juxie1984 2011-08-03
  • 打赏
  • 举报
回复
围观!!!!
prfans 2011-08-03
  • 打赏
  • 举报
回复
使用差值生成缩放后的系列图像,然后显示每一幅图像?
star4637 2011-08-03
  • 打赏
  • 举报
回复
继续加油啊!
z547904614 2011-08-02
  • 打赏
  • 举报
回复
``````
tj_swjtu 2011-08-02
  • 打赏
  • 举报
回复
帮顶。。。。。。
aogujianhan 2011-08-02
  • 打赏
  • 举报
回复
学习学习
beyond071 2011-08-02
  • 打赏
  • 举报
回复
产生不连贯的原因很好理解。
比如原来的连续三个关键帧上,有点A0、点A1、点A2,分别描述了3个连续时间中A点的运动轨迹。

不妨设A0(128, 128), A1(129, 128), A2(130, 128)

那么在动画播放中,就是每次移动一像素的过程(128 -> 129 -> 130),平滑运动。

如果把图像放大两倍:A0'(256,256) -> A1'(258, 256) -> A2'(250, 256)
现在相邻两帧的运动间隔是2像素,已经不是平滑运动了。

放大后的情况是,即使使用了双线性插值反走样(把运动经过的坐标用浮点数描述),也还
是可能会遇到相邻帧之间不平滑的情况。更糟糕的是,线性插值本身就不一定能够描述动画
中物体的运动特性。

实际中要把帧图像放大又要保持帧与帧之间的连贯性,常常需要动画制作者给出物体运动的
轨迹方程作为后台脚本,这样在放缩后也能产生合乎要求的连续帧。
虎皮 2011-08-02
  • 打赏
  • 举报
回复
学习 好东东
coldkey00 2011-08-02
  • 打赏
  • 举报
回复
学习。。。。。
angelevilra 2011-08-02
  • 打赏
  • 举报
回复
我是来学习的~
jiyangji 2011-08-02
  • 打赏
  • 举报
回复
学习学习
loooser17 2011-08-02
  • 打赏
  • 举报
回复
俺觉得这题目有点纯扯啊,这算哪门子算法,既不解决实际问题又不解决理论问题,从开始就在扯淡
较真的话自己实现个双线性插值,差值过程中简单处理一下时间,无非就是算个fps
而且根本就不知道“双线性滤镜”是哪来的,楼主哥难道你用的photoshop?那可是另外一个领域了
回帖的人也净是瞎起哄
jiyuhai1988 2011-08-02
  • 打赏
  • 举报
回复
路过 学习中
zack_hoo 2011-08-01
  • 打赏
  • 举报
回复
好贴就是得顶!
blueink_200451 2011-07-31
  • 打赏
  • 举报
回复
mark
smalle 2011-07-31
  • 打赏
  • 举报
回复
如果直接放大的话,造成卡的现象,原因是在,定时器的时间间隔与图像变化次数与其不一致,不一定每次都刚刚好在定时器触发那一刻改变图像。如果1秒变化20次,则0.05秒变化1次,图像在100X100时记录下时间值,下一次定时器触发时取得当前时间值,与上一次时间值的差是否达到0.05秒,如果差值少于0.05秒,则等下一次定时器触发再检查时间值,如果大于0.05秒,且为0.05的n倍则图像的变化次数为n次。

如果是模拟放大的话,可以考虑在按照如下顺序显示过渡图像:
1. 100X100的图像的透明度为60%,101X101的图像透明度为40%,把两个图像混合显示。
2. 100X100的图像的透明度为40%,101X101的图像透明度为60%,把两个图像混合显示。
2. 101X101的图像透明度为100%
程序小海 2011-07-31
  • 打赏
  • 举报
回复
learing
~~~~~
huangxuxing 2011-07-31
  • 打赏
  • 举报
回复
hao de
ChrisAK 2011-07-30
  • 打赏
  • 举报
回复
这个...学习..
加载更多回复(75)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧