图片缩放动画的平滑处理

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

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

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

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

...全文
3391 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)
第3章 图形技术 3.1 绘制图形 实例104 绘制正弦曲线 实例105 绘制蜗牛曲线 实例106 绘制贝塞尔曲线 实例107 画图程序 实例108 绘制立体模型 实例109 利用IFS算法绘制自然景物 3.2 图像预览 实例110 图片自动预览程序 实例111 图片批量浏览 实例112 浏览大幅BMP图片 实例113 放大和缩小图片 实例114 图像任意角度旋转 3.3 图片效果 实例115 图片马赛克效果 实例116 图片百叶窗效果 实例117 电影胶片特效 实例118 翻转图片效果 实例119 图片浮雕效果 3.4 图片颜色转换 实例120 图像的锐化处理 实例121 图片反色处理 实例122 图像的灰度化转换 实例123 显示JPG图片 3.5 图形转换与缩放 实例124 将位图转换为JPG 实例125 将位图转为GIF图标 实例126 图片平滑缩放 3.6 图像的剪切、合成与识别 实例127 图像的剪切 实例128 图像的合成 实例129 获取鼠标任意位置的颜色值 实例130 提取图片中的对象 实例131 手写数字识别 3.7 图像字体 实例132 旋转的文字 实例133 当前系统字体列表 实例134 空心文字 实例135 彩虹文字 实例136 如何在图片平滑移动文字 实例137 图像水印效果 3.8 图像管理 实例138 管理计算机内图片文件的程序 实例139 提取并保存应用程序图标 3.9 图片动画 实例140 利用图片制作屏幕保护程序 实例141 图片动画 实例142 指法练习软件 3.10 简单游戏设计 实例143 拼图游戏 实例144 黑白棋 实例145 俄罗斯方块 实例146 快来打地鼠 实例147 幸运转盘 3.11 OpenGL程序设计 实例148 制作OpenGL动画 实例149 利用OpenGL绘制立体模型 实例150 利用OpenGL绘制NURBS曲线 3.12 GDI+程序设计 实例151 使用GDI+显示GIF动画 实例152 使用GDI+实现图像格式转换

19,469

社区成员

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

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