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

MTK界面设计中消除PNG图片的杂色背景

PNG图片因为体积小,背景可以透明,并且由于采用矢量图像技术可以制作无锯齿的圆角类型的图形等优势。曾经在网页和一些领域得到广泛应用。近来可能是由于MTK的热门提供了更多的工作机会,导致不少以前从事网站创作的美术人员也转入到手机行业。这些同志们设计的UI充斥了大量的PNG图片。给MTK的MMI工程师提供了不小的挑战。

确切的说,我认为在MTK手机平台上,PNG并不具有显著优势。MTK会把PNG转化为一种BMPA的中间格式,该格式并不比同样效果的BMP小,有时还会大上许多。至于背景透明,其实在MTK平台,是可以把一幅BMP显示为背景透明的。这样PNG存在的唯一意义大约就在于显示一些更精致的需要流线型图像效果的UI里了。而PNG在使用过程中,在某些方面,比如叠加,比如在层中使用,往往会存在一些显示效果不尽如人意的地方。这些原因导致许多MMI工程师不喜欢PNG,除非在非常必要的情况下,否则会直接到PNG用ASD转为BMP使用。虽然许多时候我也不建议使用PNG,但有些必要场合,使用PNG毕竟也能为手机显示增色不少。

一次帮客户设计UI时,遇到在层中显示PNG图片显示乱屏,图的背景有杂色,图标边缘通透等问题,严重影响了显示效果。本可转为BMP重新设计,后来抱着学习的态度搜了一下52RD,竟然有人提供了一个解决了函数gdi_image_abm_set_source_layer,后来研究了一下,果然解决了这个问题。

附上样例程序:(由于该层在移动过程中只是位置改变,然后刷在屏上,所以没有把把创建层的代码与使用代码分开,图片IMG_IDLE_TIME_BG为PNG,背景上显示的字符也为PNG图片,能够消除PNG层乱屏杂色问题的函数是gdi_push_and_set_alpha_blending_source_layer,当然gdi_image_abm_set_source_layer也能达到)
void DrawDateTimeLayer(U16 x, U16 y)
{
#ifdef WIN32
buf_ptr = (PU8)malloc(180*61*2);
#else
buf_ptr = (PU8)med_alloc_ext_mem(180*61*2);
#endif

if (buf_ptr == NULL)
{
MMI_ASSERT(0);
}

gdi_layer_create_using_outside_memory(
0,
0,
180,
61,
&mylayer,
(PU8) buf_ptr,
(S32) 180*61*2);

gdi_layer_push_and_set_active(mylayer);
gdi_layer_set_position(x, y); //设置激活层的位置
gdi_push_and_set_alpha_blending_source_layer(mylayer); //把mylayer层作为blending层
gdi_layer_clear_background(GDI_COLOR_WHITE);
gdi_layer_set_source_key(TRUE, GDI_COLOR_WHITE);
gdi_image_draw_id(x, y, IMG_IDLE_TIME_BG);//绘制时间背景
gdi_pop_and_restore_alpha_blending_source_layer(); //恢复blending层
gdi_layer_pop_and_restore_active();
gdi_layer_set_blt_layer(dm_get_wallpaper_layer(), GDI_LAYER_MAIN_BASE_LAYER_HANDLE, mylayer, NULL);
gdi_layer_blt_previous(0, 0, UI_device_width-1, UI_device_height - 1);
}

相关文章:

  • 知道这20个正则表达式,能让你少写1,000行代码
  • MTK一些有用的层函数
  • 基于SWOOLE的分布式SOCKET消息服务器架构
  • MTK的铃声修改与替换
  • 基于SWOOLE的高可用分布式SOKET服务器系统搭建V2.0
  • 美化MTK的拨号窗口
  • javascript 18位身份证校验程序
  • MTK的DM应用实例
  • 优酷KUX格式转码
  • 推荐一款全面的系统性能监控工具 -- glances
  • 再转载一篇---引用 MTK的高亮机制
  • 解决加密的HLS(m3u8)视频转换问题
  • 再谈MTK的History机制
  • 在屏幕外的窗口,鼠标移动到屏幕边缘时自动把屏幕外部分拉回屏幕内怎么设置?
  • MTK的图片资源的修改与替换
  • 2017届校招提前批面试回顾
  • 2018一半小结一波
  • 77. Combinations
  • css选择器
  • download使用浅析
  • Druid 在有赞的实践
  • Golang-长连接-状态推送
  • MaxCompute访问TableStore(OTS) 数据
  • MySQL几个简单SQL的优化
  • php中curl和soap方式请求服务超时问题
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue2 SSR 的优化之旅
  • 闭包--闭包作用之保存(一)
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何在 Tornado 中实现 Middleware
  • 用mpvue开发微信小程序
  • 字符串匹配基础上
  • 第二十章:异步和文件I/O.(二十三)
  • ​iOS安全加固方法及实现
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #git 撤消对文件的更改
  • (CPU/GPU)粒子继承贴图颜色发射
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (分享)自己整理的一些简单awk实用语句
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十八)三元表达式和列表解析
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)汇编语言——简单程序
  • (转)linux下的时间函数使用
  • (转)shell调试方法
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Micro Framework初体验
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • @Bean有哪些属性