当前位置: 首页 > news >正文

另一种MTK特效制作的方法,层复制

对于MTK平台来说,菜单和屏幕特效曾经在很长的一段时间里,影响甚远。

但对于其设计过程和方法,由于各种各样的原因,很少有人提及。

这里介绍一种不同于前几天日志所载之方法的另一种方法,就是合并图层,其核心实现函数如下。

void my_gdi_layer_copy(gdi_layer_struct* dst_layer, int dst_x, int dst_y, int width, int height,
gdi_layer_struct* src_layer, int src_x, int src_y)
{
U16 *dst_buf, *src_buf;
int i;

if (dst_x < 0 || dst_y < 0 || dst_x + width > dst_layer->width || dst_y + height > dst_layer->height)
{
if (dst_x < 0)
{
width -= -dst_x;
src_x += -dst_x;
dst_x = 0;
}
if (dst_y < 0)
{
height -= -dst_y;
src_y += -dst_y;
dst_y = 0;
}
if (dst_x + width > dst_layer->width)
{
width = dst_layer->width - dst_x;
}
if (dst_y + height > dst_layer->height)
{
height = dst_layer->height - dst_y;
}
}
if (src_x < 0 || src_y < 0 || src_x + width > src_layer->width || src_y + height > src_layer->height)
{
if (src_x < 0)
{
width -= -src_x;
dst_x += -src_x;
src_x = 0;
}
if (src_y < 0)
{
height -= -src_y;
dst_y += -src_y;
src_y = 0;
}
if (src_x + width > src_layer->width)
{
width = src_layer->width - src_x;
}
if (src_y + height > src_layer->height)
{
height = src_layer->height - src_y;
}
}
if (width <= 0 || height <= 0)
return;

dst_buf = (U16 *)dst_layer->buf_ptr + dst_y * dst_layer->width + dst_x;
src_buf = (U16 *)src_layer->buf_ptr + src_y * src_layer->width + src_x;
for (i = 0; i < height; i ++)
{
memcpy(dst_buf, src_buf, width * 2);
dst_buf += dst_layer->width;
src_buf += src_layer->width;
}
}

有兴趣的朋友可以自己利用该函数研发各种各样的变化效果。

这个函数,加上我前一段时间提供的另一种方法,大致可以制作二十种左右的效果。

相关文章:

  • 字典树(Trie)——入门篇
  • 警惕:电信加紧发力为哪般?(下)
  • Codeforces Round #637 (Div. 2) C. Nastya and Strange Generator(阅读理解/思维)
  • Broken Space Bar(Trie)[待补]
  • 小白兔和小灰兔
  • VC图片显示特效
  • UVA1153 Keep the Customer Satisfied(贪心+优先队列)
  • UVA10570 Meeting with Aliens(枚举/优化)
  • flash小实验
  • 2019 ICPC Greater New York Region J - Unicycles (规律+递推+矩阵快速幂)
  • WebLogic 9.2中文帮助网站公测中,欢迎大家访问!
  • 2019 ICPC Greater New York Region C - PassTheBuck(概率)
  • Oracle11gR2安装简介
  • 2019 ICPC Greater New York Region I - RationalBase(思维+进制转换)
  • 广告营销的创新
  • 深入了解以太坊
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • Apache Pulsar 2.1 重磅发布
  • create-react-app项目添加less配置
  • docker python 配置
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • js对象的深浅拷贝
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode18.四数之和 JavaScript
  • 闭包--闭包作用之保存(一)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 计算机在识别图像时“看到”了什么?
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前端_面试
  • 嵌入式文件系统
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 数据结构java版之冒泡排序及优化
  • 王永庆:技术创新改变教育未来
  • 小而合理的前端理论:rscss和rsjs
  • 源码安装memcached和php memcache扩展
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Python 之网络式编程
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $L^p$ 调和函数恒为零
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十)c52学习之旅-定时器实验
  • (十三)Maven插件解析运行机制
  • (转)JAVA中的堆栈
  • (转)一些感悟
  • (转载)OpenStack Hacker养成指南
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ******之网络***——物理***
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET 8.0 发布到 IIS
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Framework杂记