中兴通讯股份有限公司 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
| 权利要求书 1、 一种实现水波紋特效的方法, 其特征在于, 该方法包括: 在界面设定水波紋特效的矩形区域, 获取所述矩形区域内的图像作为 原图像; 设置原图像所有像素的初始水波高度值及石头的参数; 在移动终端的界面上有点击发生时, 以被点击的像素位置作为投石点, 周期性产生下一帧驱动消息, 在每次下一帧驱动消息产生时, 获得下一帧 图像各像素的水波高度值并记录; 根据下一帧图像各像素的水波高度值, 获取像素偏移量, 将原图像各 像素按照像素偏移量重新进行位置排列得到下一帧图像, 并显示。 2、 根据权利要求 1所述的方法, 其特征在于, 所述获取像素偏移量, 将原图像各像素按照像素偏移量重新进行位置排列得到下一帧图像, 为: 将每个像素的左右两个像素的水波高度值的差值右移指定位, 作为水平偏 移量, 上下两个像素的水波高度值的差值右移指定位, 作为垂直偏移量, 下一帧图像中, 每个像素都由该像素的坐标加上相应的水平偏移量和垂直 偏移量后所对应的原图像上的像素填充。 3、 根据权利要求 1所述的方法, 其特征在于, 所述获得下一帧图像各 像素的水波高度值并记录为: 在第一次下一帧驱动消息产生时, 根据投石 点及设置的石头的大小, 在石头覆盖范围内的像素的水波高度值由初始水 波高度值与根据石头重量产生的水波高度值相加得到, 其他像素的水波高 度值仍为初始水波高度值, 记录各像素的水波高度值; 在第一次以后的每次下一帧驱动消息产生时, 对于当前帧图像每个位 置的像素, 取其周围的多个像素的水波高度值的和, 右移指定位后, 减去 前一帧图像所述位置的像素的水波高度值, 将得到的结果作为下一帧图像 相应位置像素的水波高度值, 并记录下一帧图像各像素的水波高度值。 4、 根据权利要求 3所述的方法, 其特征在于, 当水波紋正在进行的同 时, 又有投石点出现时, 该方法进一步包括: 将当前帧图像各像素的水波 高度值作为初始水波高度值, 重新从第一次下一帧驱动消息产生时进行处 理。 5、 根据权利要求 4所述的方法, 其特征在于, 该方法进一步包括: 设 置帧计数器和跳帧条件, 根据帧计数器对下一帧驱动消息的计数值, 在满 足跳帧条件时, 跳过此次的下一帧驱动消息。 6、 根据权利要求 5所述的方法, 其特征在于, 该方法进一步包括: 产 生水波蔓延的衰减效果, 为: 对每次得到的水波高度值不为 0 的像素对应 的水波高度值都乘以一个小于 1的系数。 7、 根据权利要求 6所述的方法, 其特征在于, 该方法进一步包括: 产 生水波在边沿处弹回的效果, 为: 在将原图像各像素按照像素偏移量重新 进行位置排列时, 将加上像素偏移量后、 超出矩形区域的坐标映射到矩形 区域内, 下一帧图像的相应位置的像素由映射到矩形区域内的坐标所对应 的原图像的像素填充。 8、 一种实现水波紋特效的装置, 其特征在于, 该装置包括: 初始设置 模块、 投石处理模块、 驱动消息模块、 显示模块、 存储模块、 投石点模块; 其中, 初始设置模块, 用于在界面设定水波紋特效的矩形区域, 获取所述矩 形区域内的图像作为原图像; 设置原图像所有像素的初始水波高度值及石 头的参数; 投石点模块, 用于获取移动终端界面上被点击的像素位置作为投石点, 通知投石处理模块和驱动消息模块; 投石处理模块, 用于获得下一帧图像各像素的水波高度值, 并通知存 储模块; 驱动消息模块, 用于周期性产生下一帧驱动消息给显示模块; 显示模块, 用于通知投石处理模块, 并根据投石处理模块获得的下一 帧图像各像素的水波高度值, 获取像素偏移量, 将原图像各像素按照像素 偏移量重新进行位置排列得到下一帧图像; 将得到的下一帧图像显示到界 面; 存储模块, 用于记录投石处理模块得到的水波高度值。 9、 根据权利要求 8所述的装置, 其特征在于, 所述投石处理模块, 进 一步用于当水波紋正在进行的同时, 又收到投石点模块通知的投石点、 且 收到显示模块的通知时, 将当前帧图像各像素的水波高度值作为各像素的 初始水波高度值, 重新从第一次下一帧驱动消息产生时进行处理; 和 /或, 所述投石处理模块, 进一步用于产生水波蔓延的衰减效果, 具 体的: 对每次得到的水波高度值不为 0 的像素对应的水波高度值都乘以一 个小于 1的系数后, 通知存储模块; 和 /或, 所述显示模块, 进一步用于产生水波在边沿处弹回的效果, 具 体的: 在将原图像各像素按照像素偏移量重新进行位置排列时, 将加上像 素偏移量后、 超出矩形区域的坐标映射到矩形区域内, 下一帧图像的相应 位置的像素由映射到矩形区域内的坐标所对应的原图像的像素填充。 10、 根据权利要求 8或 9所述的装置, 其特征在于, 所述装置进一步 包括跳帧模块、 帧计数器, 其中, 跳帧模块, 用于设置跳帧条件, 并根据帧计数器的计数值, 在满足跳 帧条件时, 通知显示模块跳过此次的下一帧驱动消息; 所述显示模块, 进一步用于在获取像素偏移量之前, 通知跳帧模块, 并在收到跳帧模块通知跳过此次的下一帧驱动消息时, 跳过此次的下一帧 驱动消息; 帧计数器, 用于对下一帧驱动消息进行计数, 并把计数值通知跳帧模 块。 |
本发明涉及消费类电子产品的视觉特效技术, 尤其涉及一种实现水波 紋特效的方法和装置。 背景技术
进入第三代移动通信技术(3G ) 时代, 消费类电子产品越来越注重用 户的体验。那些能给用户带来好的视觉感受的 产品,比如苹果公司的 iphone 手机, 往往能占据很大的市场。 然而, 移动终端等小型消费类电子产品受 制于价格、 产品体积等因素, 其硬件的运算和处理能力是不能与台式机、 工作站相比的, 这就导致不能使用较大型的图像处理软件来实 现精巧的图 像, 很难给用户在视觉感受上带来较好的体验。
在当前市面上流行的各种移动终端等电子产品 中, 待机界面或图片浏 览界面, 基本上都是静态的, 不能和用户产生交互, 用户体验效果不佳。 发明内容
有鉴于此, 本发明的主要目的在于提供一种实现水波紋特 效的方法和 装置, 实现界面显示的图片具有水波紋的视觉效果, 并能与用户产生交互。
为达到上述目的, 本发明的技术方案是这样实现的:
本发明提供的一种实现水波紋特效的方法, 该方法包括:
在界面设定水波紋特效的矩形区域, 获取所述矩形区域内的图像作为 原图像; 设置原图像所有像素的初始水波高度值及石头 的参数;
在移动终端的界面上有点击发生时, 以被点击的像素位置作为投石点, 周期性产生下一帧驱动消息, 在每次下一帧驱动消息产生时, 获得下一帧 图像各像素的水波高度值并记录;
根据下一帧图像各像素的水波高度值, 获取像素偏移量, 将原图像各 像素按照像素偏移量重新进行位置排列得到下 一帧图像, 并显示。
上述方案中, 所述获取像素偏移量, 将原图像各像素按照像素偏移量 重新进行位置排列得到下一帧图像, 为: 将每个像素的左右两个像素的水 波高度值的差值右移指定位, 作为水平偏移量, 上下两个像素的水波高度 值的差值右移指定位, 作为垂直偏移量, 下一帧图像中, 每个像素都由该 像素的坐标加上相应的水平偏移量和垂直偏移 量后, 所对应的原图像上的 像素填充。
上述方案中, 所述获得下一帧图像各像素的水波高度值并记 录为: 在 第一次下一帧驱动消息产生时, 根据投石点及设置的石头的大小, 在石头 覆盖范围内的像素的水波高度值由初始水波高 度值与根据石头重量产生的 水波高度值相加得到, 其他像素的水波高度值仍为初始水波高度值, 记录 各像素的水波高度值;
在第一次以后的每次下一帧驱动消息产生时, 对于当前帧图像每个位 置的像素, 取其周围的多个像素的水波高度值的和, 右移指定位后, 减去 前一帧图像所述位置的像素的水波高度值, 将得到的结果作为下一帧图像 相应位置像素的水波高度值, 并记录下一帧图像各像素的水波高度值。
上述方案中, 当水波紋正在进行的同时, 又有投石点出现时, 该方法 进一步包括: 将当前帧图像各像素的水波高度值作为初始水 波高度值, 重 新从第一次下一帧驱动消息产生时进行处理。
上述方案中, 该方法进一步包括: 设置帧计数器和跳帧条件, 根据帧 计数器对下一帧驱动消息的计数值, 在满足跳帧条件时, 跳过此次的下一 帧驱动消息。
上述方案中, 该方法进一步包括: 产生水波蔓延的衰减效果, 为: 对 每次得到的水波高度值不为 0 的像素对应的水波高度值都乘以一个小于 1 的系数。
上述方案中, 该方法进一步包括: 产生水波在边沿处弹回的效果, 为: 在将原图像各像素按照像素偏移量重新进行位 置排列时, 将加上像素偏移 量后、 超出矩形区域的坐标映射到矩形区域内, 下一帧图像的相应位置的 像素由映射到矩形区域内的坐标所对应的原图 像的像素填充。
本发明提供的一种实现水波紋特效的装置, 该装置包括: 初始设置模 块、 投石处理模块、 驱动消息模块、 显示模块、 存储模块、 投石点模块; 其中,
初始设置模块, 用于在界面设定水波紋特效的矩形区域, 获取所述矩 形区域内的图像作为原图像; 设置原图像所有像素的初始水波高度值及石 头的参数;
投石点模块, 用于获取移动终端界面上被点击的像素位置作 为投石点, 通知投石处理模块和驱动消息模块;
投石处理模块, 用于获得下一帧图像各像素的水波高度值, 并通知存 储模块;
驱动消息模块, 用于周期性产生下一帧驱动消息给显示模块; 显示模块, 用于通知投石处理模块, 并根据投石处理模块获得的下一 帧图像各像素的水波高度值, 获取像素偏移量, 将原图像各像素按照像素 偏移量重新进行位置排列得到下一帧图像; 将得到的下一帧图像显示到界 面;
存储模块, 用于记录投石处理模块得到的水波高度值。
上述方案中, 所述投石处理模块, 进一步用于当水波紋正在进行的同 时, 又收到投石点模块通知的投石点、 且收到显示模块的通知时, 将当前 帧图像各像素的水波高度值作为各像素的初始 水波高度值, 重新从第一次 下一帧驱动消息产生时进行处理;
和 /或, 所述投石处理模块, 进一步用于产生水波蔓延的衰减效果, 具 体的: 对每次得到的水波高度值不为 0 的像素对应的水波高度值都乘以一 个小于 1的系数后, 通知存储模块;
和 /或, 所述显示模块, 进一步用于产生水波在边沿处弹回的效果, 具 体的: 在将原图像各像素按照像素偏移量重新进行位 置排列时, 将加上像 素偏移量后、 超出矩形区域的坐标映射到矩形区域内, 下一帧图像的相应 位置的像素由映射到矩形区域内的坐标所对应 的原图像的像素填充。
上述方案中, 所述装置进一步包括跳帧模块、 帧计数器, 其中, 跳帧模块, 用于设置跳帧条件, 并根据帧计数器的计数值, 在满足跳 帧条件时, 通知显示模块跳过此次的下一帧驱动消息;
所述显示模块, 进一步用于在获取像素偏移量之前, 通知跳帧模块, 并在收到跳帧模块通知跳过此次的下一帧驱动 消息时, 跳过此次的下一帧 驱动消息;
帧计数器, 用于对下一帧驱动消息进行计数, 并把计数值通知跳帧模 块。
本发明提供的一种实现水波紋特效的方法和装 置, 在界面设定水波紋 特效的矩形区域, 获取所述矩形区域内的图像作为原图像; 设置原图像所 有像素的初始水波高度值及引起水波紋的石头 的参数; 在移动终端的界面 上有点击发生时, 以被点击的像素位置作为投石点, 周期性产生下一帧驱 动消息, 在每次下一帧驱动消息产生时, 获得下一帧图像各像素的水波高 度值并记录; 根据下一帧图像各像素的水波高度值, 获取像素偏移量, 将 原图像按照像素偏移量重新进行像素排列得到 下一帧图像, 并显示; 如此, 将每一帧图像在界面上显示, 就会出现水波紋的视觉效果, 当界面是触摸 屏幕时, 图像会根据用户触碰的点产生水波紋的视觉特 效, 从而能够与用 户产生交互, 具有较好的用户体验。 附图说明
图 1为光线在水中发生折射现象的示意图;
图 2为本发明实现水波紋特效的方法流程的示意 ;
图 3为本发明获取像素 X0的水波高度值的示意图;
图 4为本发明实现水波紋特效的装置结构的示意 。 具体实施方式
光线从水中传播到空气中会发生折射现象, 如图 1 所示, 水面下的 B 点, 其光线在进入 A点的人眼时发生了折射, 而人还是会直观的认为 B点 在 B,点的位置. 当水面并不平静时, 水面上各点的折射率是在时刻变化的, 于是我们看到了水面下的 B点在其周围一定范围不断地来回运动, 所有的 这些来回运动的点组成了一幅错切变化的图像 。 因此, 只需要将原始的图 像各像素点的位置按一些运算方法不断的重新 排列, 生成水波的中间过程, 就可以模拟现实中的动态水波紋效果。
本发明的基本思想是: 在界面设定水波紋特效的矩形区域, 获取所述 矩形区域内的图像作为原图像; 设置原图像所有像素的初始水波高度值及 引起水波紋的石头的参数; 在移动终端的界面上有点击发生时, 以被点击 的像素位置作为投石点, 周期性产生下一帧驱动消息, 在每次下一帧驱动 消息产生时, 获得下一帧图像各像素的水波高度值并记录; 根据下一帧图 像各像素的水波高度值, 获取像素偏移量, 将原图像按照像素偏移量重新 进行像素排列得到下一帧图像, 并显示; 依此类推, 每一帧图像都可以通 过前两帧图像各像素的水波高度值得到。
下面通过附图及具体实施例对本发明做进一步 的详细说明。
本发明实现水波紋特效的方法, 如图 2 所示, 该方法包括以下几个步 骤:
步骤 201 : 在界面设定水波紋特效的矩形区域, 获取所述矩形区域内的 图像作为原图像;
例如: 在界面设定一个宽为 w像素、 高为 h像素的矩形范围作为水波 紋特效区域, 矩形区域的左上角在界面的坐标为 (left, top ), 将矩形区域 内的所有坐标对应的像素组成的图像存储到指 定位置, 作为原图像。
步骤 202:设置原图像所有像素的初始水波高度值及 起水波紋的石头 的参数;
其中, 所述初始水波高度值一般设为 0, 即水面是平静的, 若初始水波 高度值设定不为 0, 则会对最终的水波紋产生干涉的效果;
所述石头的参数包括石头的形状、 大小及重量; 其中,
所述石头的形状影响产生的水波紋的形状, 可以是圓形、 方形等; 所述石头的大小影响起始产生的水波紋的范围 , 一般可以选择覆盖 1-50个像素;
所述石头的重量影响产生水波紋的振幅大小。
步骤 203: 当有石头投入时, 根据投石点在界面的坐标, 判断投石点是 否在矩形区域内,如果在, 则执行步骤 204; 如果不在, 则继续执行本步骤; 所述当石头投入时一般是在移动终端的触摸界 面上有点击发生时; 所述投石点是获取界面上被点击的像素位置作 为投石点, 为石头的中 心;
进一步的, 还可以根据石头的大小, 判断石头是否砸到边界, 如果砸 到矩形区域的边界, 则通过对投石点坐标的加减运算调整投石点的 位置, 使石头边缘紧邻矩形区域的边界。
步骤 204:周期性产生下一帧驱动消息,在每次下一 驱动消息产生时, 获取并记录下一帧图像各像素的水波高度值; 本步骤中, 周期性产生下一帧驱动消息, 在第一次下一帧驱动消息产 生时, 所述获取并记录下一帧图像各像素的水波高度 值, 具体为: 根据投 石点及设置的石头的大小, 在石头覆盖范围内的像素的水波高度值由初始 水波高度值与根据石头重量产生的水波高度值 相加得到, 其他像素的水波 高度值仍为初始水波高度值, 记录各像素的水波高度值;
其中, 所述根据石头重量产生的水波高度值可以是直 接以石头重量作 为水波高度值, 也可以是按照像素到石头中心、 即投石点的距离乘以重量 或者重量的平方计算得到的值作为水波高度值 ; 所述右移指定位一般是在
1-9位间选择一个进行右移, 可以根据实际效果进行选择;
在第一次以后的每次下一帧驱动消息产生时, 所述获取并记录下一帧 图像各像素的水波高度值, 具体的: 对于当前帧图像每个位置的像素, 取 其周围的 4个或 4个以上像素的水波高度值的和, 右移指定位后, 减去前 一帧图像所述位置的像素的水波高度值, 将得到的结果作为下一帧图像相 应位置像素的水波高度值, 并记录下一帧图像各像素的水波高度值;
其中, 对于位置在边界上的像素, 会有取不全周围像素的水波高度值 的情况, 所述位置在边界上的像素的水波高度值可以取 原图像上所述位置 像素的初始水波高度值;
所述右移指定位一般是在 1~9位间选择一个进行右移, 可以根据实际 效果进行选择;
例如, 以图 3中的像素 X0为例, 可以取当前帧图像像素 XI、 X2、 X3、 X4的水波高度值的和, 然后右移指定位, 再减去前一帧图像像素点 X0的 水波高度值, 得到下一帧图像像素点 X0的水波高度值, 以此类推, 可以得 到下一帧图像所有像素点的水波高度值, 将得到的下一帧图像的水波高度 值进行记录;其中,上述进行水波高度值求和 的像素点还可以包括 X5、 X6、 X7、 X8, 或者 X5、 X6、 X7、 X8、 Y0、 Yl、 Y2、 Y3; 本步骤还可以分配两个指定的位置, 分别记录当前帧图像和前一帧图 像各像素的水波高度值, 当得到下一帧图像各像素的水波高度值时, 用下 一帧图像各像素的水波高度值覆盖前一帧图像 各像素的水波高度值; 这样 , 将原来的当前帧图像各像素的水波高度值设置 为前一帧图像各像素的水波 高度值, 刚记录的下一帧图像各像素的水波高度值设置 为当前帧图像各像 素的水波高度值;
其中, 在没有投石时, 两个位置保存的各像素的水波高度值均为 0, 在 得到第一个下一帧图像各像素的水波高度值时 , 用得到的水波高度值覆盖 任意一个位置的初始水波高度值; 这样, 在下一时刻, 就会有一个保存的 是当前帧图像各像素的水波高度值, 另一个保存的是前一帧图像各像素的 水波高度值;
本步骤进一步包括: 为了产生水波蔓延的衰减效果, 可以对每次得到 的水波高度值不为 0的像素对应的水波高度值都乘以一个小于 1的系数, 这样水波高度值会不断减小, 产生水波蔓延的衰减效果, 如: 乘以 1-2· η 等, 其中, η的值越大, 衰减的越慢, 当所有像素的水波高度值都为 0时, 停止 产生下一帧驱动消息。
本步骤中, 为了不阻塞点击事件的处理, 下一帧驱动消息的优先级要 低于或等于点击事件的优先级; 所述下一帧驱动消息可以是定时器定时触 发的消息。
步骤 205: 根据下一帧图像各像素的水波高度值, 获取像素偏移量, 将 原图像各像素按照像素偏移量重新进行位置排 列得到下一帧图像, 并显示 所述下一帧图像;
所述像素偏移量分为水平偏移量和垂直偏移量 , 分别对应像素坐标的 横坐标与 έ从坐标;
具体的, 在每次获得下一帧图像各像素的水波高度值时 , 根据下一帧 图像各像素的水波高度值, 将每个像素的左右两个像素的水波高度值的差 值右移指定位, 作为水平偏移量, 上下两个像素的水波高度值的差值右移 指定位, 作为垂直偏移量, 下一帧图像中, 每个像素都由该像素坐标加上 相应的水平偏移量和垂直偏移量后, 所对应的原图像上的像素填充, 在得 到下一帧图像后, 显示所述下一帧图像到界面;
例如:将原图像的所有像素在界面上的横坐标 减去 left,纵坐标减去 top, 得到在矩形区域内的坐标, 以原图像上的某一像素为例, 在矩形区域内, 该像素的坐标设为 (m, n ), 将坐标为 (m-1 , n )和(m+1 , n ) 的两个像 素的水波高度值的差值右移指定位, 作为水平偏移量 dx; 将坐标为 (m, n+1 )和(m, n-1 )的两个像素的水波高度值的差值右移指定位 作为垂直 偏移量 dy, 下一帧图像中, 坐标为(m, n )的像素由原图像坐标为( m+dx, n+dy ) 的像素填充; 依此类推, 下一帧图像中每个像素按上述方法填充; 其中, 所述坐标为 ( m-1 , n )、 (m+1 , n )、 ( m, n+1 )、 ( m, n-1 ) 中 的任意一个超出矩形区域时, 即下一帧图像中, 坐标为 (m, n ) 的像素是 矩形区域边界上的像素, 则用原图像上坐标为 (m, n ) 的像素填充。
进一步的, 本步骤在获取像素偏移量之前还包括: 设置帧计数器和跳 帧条件, 帧计数器用于对下一帧驱动消息进行计数, 根据帧计数器对下一 帧驱动消息的计数值, 在满足跳帧条件时, 跳过此次的下一帧驱动消息; 如: 跳帧条件为当前帧数不为 N的整数倍时跳过, N可以为 2 ~ 9的整数, 则当帧计数器的计数值不为 N的整数倍时, 跳过此次下一帧驱动消息, 等 待下一次的下一帧驱动消息; 即: 当有下一帧驱动消息时, 帧计数器的计 数值加 1 , 并判断计数值是否为 N的整数倍, 如果不为 N的整数倍, 不向 下执行, 等待下一次下一帧驱动消息; 如果为 N的整数倍, 则继续向下执 行; 这样会为处理速度较慢的处理器减小负担;
进一步的, 本步骤中, 当水波紋正在进行的同时, 又有投石点出现时, 将当前帧图像各像素的水波高度值作为初始水 波高度值, 重新从第一次下 一帧驱动消息产生时进行处理, 这样前后两个投石点产生的水波紋将产生 相互干涉的效果;
本发明所述方法进一步包括: 为了产生水波在边沿处弹回的效果, 可 以在将原图像各像素按照像素偏移量重新进行 位置排列时, 将加上像素偏 移量后、 超出矩形区域的坐标映射到矩形区域内, 下一帧图像的相应位置 的像素由映射到矩形区域内的坐标所对应的原 图像的像素填充; 例如: 将 原图像的坐标为 (m+dx, n+dy ) 的像素排列到下一帧图像的坐标( m, n ) 处时, 假设是横坐标超出范围, 即 m+dx>图宽或 m+dx<0, 若 m+dx>图宽, 则取 m+dx对 m得余数做横坐标,若 m+dx<0,则取图宽加上 m+dx对 m得 余数做横坐标, 使其在原图像的范围内, 将新得到的坐标对应原图像的像 素填充到下一帧图像的 (m, n )处;
本发明所述方法进一步包括: 设置控制按键, 如: 开启、 暂停、 继续、 退出等, 当开启按键按下时, 开启水波紋的特效; 当暂停按键按下时, 暂 停产生下一帧驱动消息; 当继续按键按下时, 继续产生下一帧驱动消息; 当退出按键按下时, 关闭水波紋的特效;
进一步的, 所述控制按键还包括: 衰减按键、 雨点按键; 当衰减按键 按下时, 对每次生成的下一帧图像中水波高度值不为 0 的像素对应的水波 高度值都乘以一个小于 1的系数;
当雨点按键按下时, 每隔一定的帧数随机选取界面上的一个像素位 置 作为投石点。
基于上述的方法, 本发明还提供一种实现水波紋特效的装置, 如图 4 所示, 该装置包括: 初始设置模块 41、 投石点模块 42、 投石处理模块 43、 驱动消息模块 44、 显示模块 45、 存储模块 46; 其中,
初始设置模块 41 , 用于在界面设定水波紋特效的矩形区域, 获取所述 矩形区域内的图像作为原图像; 设置原图像所有像素的初始水波高度值及 石头的参数;
投石点模块 42 , 用于获取界面上被点击的像素位置作为投石点 , 通知 投石处理模块 43和驱动消息模块 44;
所述界面一般为移动终端的触摸界面;
投石处理模块 43 , 用于获得下一帧图像各像素的水波高度值, 并通知 存储模块 46;
所述投石处理模块 43获得下一帧图像各像素的水波高度值, 具体为: 在第一次下一帧驱动消息产生时, 根据投石点及设置的石头的大小, 在石 头覆盖范围内的像素的水波高度值由初始水波 高度值与根据石头重量产生 的水波高度值相加得到, 其他像素的水波高度值仍为初始水波高度值; 在第一次以后的每次下一帧驱动消息产生时, 对于当前帧图像每个位 置的像素, 取其周围的 4个或 4个以上像素的水波高度值的和, 右移指定 位后, 减去前一帧图像所述位置的像素的水波高度值 , 将得到的结果作为 下一帧图像相应位置像素的水波高度值, 并记录下一帧图像各像素的水波 高度值;
驱动消息模块 44 , 用于周期性产生下一帧驱动消息并发送到显示 模块 45 , 可以是定时器定时触发的消息;
其中, 为了不阻塞点击事件的处理, 所述驱动消息模块 44还用于将下 一帧驱动消息的优先级设置为低于或等于点击 事件的优先级;
显示模块 45 , 用于通知投石处理模块 43 , 并根据投石处理模块 43获 得的下一帧图像各像素的水波高度值, 获取像素偏移量, 将原图像各像素 按照像素偏移量重新进行位置排列得到下一帧 图像; 将得到的下一帧图像 显示到界面;
存储模块 46 , 用于记录投石处理模块 43得到的水波高度值; 进一步的, 所述存储模块 46, 用于以两个指定的位置记录当前帧图像 和前一帧图像各像素的水波高度值; 在收到投石处理模块 43的通知时, 用 投石处理模块 43得到的水波高度值覆盖已经记录的前一帧图 各像素的水 波高度值; 此时, 将原来当前的当前帧图像各像素的水波高度值 设置为前 一帧图像各像素的水波高度值; 刚记录的投石处理模块 43得到的水波高度 值设置为当前帧图像各像素的水波高度值;
所述投石处理模块 43 , 进一步用于当有石头投入时,根据石头的大小 , 判断石头是否砸到边界, 如果砸到矩形区域的边界, 则通过对投石点坐标 的加减运算调整投石点的位置, 使石头边缘紧邻矩形区域的边界;
所述投石处理模块 43 , 进一步用于当水波紋正在进行的同时, 又收到 投石点模块 42通知的投石点、 且收到显示模块 45的通知时, 将当前帧图 像各像素的水波高度值作为各像素的初始水波 高度值, 重新从第一次下一 帧驱动消息产生时进行处理;
所述投石处理模块 43 , 进一步用于产生水波蔓延的衰减效果, 即: 对 每次得到的水波高度值不为 0 的像素对应的水波高度值都乘以一个小于 1 的系数后, 通知存储模块 46;
所述显示模块 45进一步用于产生水波在边沿处弹回的效果, 即: 在将 原图像各像素按照像素偏移量重新进行位置排 列时, 将加上像素偏移量后、 超出矩形区域的坐标映射到矩形区域内, 下一帧图像的相应位置的像素由 映射到矩形区域内的坐标所对应的原图像的像 素填充;
该装置进一步包括控制模块 47 , 用于提供开启、 暂停、 继续、 退出等 按键, 其中,
开启按键, 用于开启所有模块;
暂停按键, 用于通知驱动消息模块 44暂停产生下一帧驱动消息; 继续按键, 用于通知驱动消息模块 44继续产生下一帧驱动消息; 退出按键, 用于关闭所有模块;
所述控制模块 47 , 进一步的包括: 衰减按键、 雨点按键; 其中, 衰减按键, 用于通知投石处理模块 43产生水波蔓延的衰减效果; 雨点按键, 用于通知投石点模块 42每隔一定的帧数随机选取界面上的 一个像素位置作为投石点;
相应的, 所述投石点模块 43进一步用于每隔一定的帧数随机选取界面 上的一个像素位置作为投石点, 通知投石处理模块 43;
所述装置进一步包括跳帧模块 48、 帧计数器 49 , 其中,
跳帧模块 48 , 用于设置跳帧条件, 并根据帧计数器的计数值, 判断是 否满足跳帧条件, 如果满足, 则通知显示模块 45跳过此次的下一帧驱动消 息; 所述跳过此次的下一帧驱动消息, 即: 显示模块 45在通知投石处理模 块 43之后, 结束操作;
所述显示模块 45 , 进一步用于在获取像素偏移量之前, 通知跳帧模块 48 , 并在收到跳帧模块 48通知跳过此次的下一帧驱动消息时, 跳过此次的 下一帧驱动消息;
帧计数器 49 , 用于对下一帧驱动消息进行计数, 并把计数值通知跳帧 模块 48。
通过上述方案, 当界面是触摸屏幕时, 图像会根据用户触碰的点产生 水波紋的视觉特效, 从而能够与用户产生交互, 具有较好的用户体验。
以上所述, 仅为本发明的较佳实施例而已, 并非用于限定本发明的保 护范围, 凡在本发明的精神和原则之内所作的任何修改 、 等同替换和改进 等, 均应包含在本发明的保护范围之内。
