彩屏半透明效果的实现

weizhongc   2015-2-12 11:33 楼主
之前一直觉得半透明的效果很炫,自己一直是比较喜欢UI的,哈哈,可以装装X啊。 下面是我实现的程序。 // B 背景点的颜色 // P 前景点的颜色 // Alpha2 前景透明度 (0-100) u16 Point_Mix(u16 B,u16 P,u8 Alpha2) { u16 RGB_R1,RGB_G1,RGB_B1; u16 RGB_R2,RGB_G2,RGB_B2; u16 RGB_C; RGB_R2=((P>>11)&0x1F)*Alpha2/100; RGB_G2=((P>>5)&0x3F)*Alpha2/100; RGB_B2=(P&0x1F)*Alpha2/100; RGB_R1 = ((B>>11)&0x1F)*(100-Alpha2)/100; RGB_G1 = ((B>>5)&0x3F)*(100-Alpha2)/100; RGB_B1 = (B&0x1F)*(100-Alpha2)/100; RGB_C = ((RGB_R1+RGB_R2)<<11)+((RGB_G1+RGB_G2)<<5)+(RGB_B1+RGB_B2); return RGB_C; } 现在不用多少内存了,你只要在画点前,先读取,然后再进行混合,再写入就好了。 /**************************************************************************** * 名 称:void ili9320_SetPoint(u16 x,u16 y,u16 point) * 功 能:在指定座标画点 * 入口参数:x 行座标 * y 列座标 * point 点的颜色 * 出口参数:无 * 说 明: * 调用方法:ili9320_SetPoint(10,10,0x0fe0); ****************************************************************************/ void ili9320_SetPoint(u16 x,u16 y,u16 point) { u16 B,C; if ( (x>320)||(y>240) ) return; if(Point_Alpha==100) { ili9320_SetCursor(x,y); LCD_WriteRAM_Prepare(); LCD_WriteRAM(point); } else { B=ili9320_GetPoint(x,y); //先读点 C=Point_Fix(B,point,Point_Alpha); //混合 ili9320_SetCursor(x,y); //设置坐标点 LCD_WriteRAM_Prepare(); LCD_WriteRAM(C); //写入 } } 主程序里面的实现方法 Point_Alpha=50; GUI_Circle(100,150,40,Red,1); Point_Alpha=80; GUI_Circle(140,150,40,Yellow,1); Point_Alpha=50; GUI_Circle(180,150,40,Black,1); 记得要是现实时,最底层的画点调用上面的函数即可。我因为用的是神舟3开发板,没单独整理个工程出来。所以我就没上传程序了 下面是我的效果图 IMG_20150212_110848.jpg 本帖最后由 weizhongc 于 2015-2-12 11:51 编辑

回复评论 (12)

支持
https://bbs.eeworld.com.cn/thread-471646-1-1.html 欢迎加入我的团队
点赞  2015-2-12 11:44
不错,不过这样弄两幅图片的话估计计算会很慢,算法要好好优化下,
点赞  2015-2-12 13:00
引用: fxyc87 发表于 2015-2-12 13:00
不错,不过这样弄两幅图片的话估计计算会很慢,算法要好好优化下,



怎么优化,差别就在开辟内存空间的话,背景点的数据从ram,另外一个是直接从lcd读取点的数据。
因为程序都好简单了 就加减乘除啊。除非那一段混合的用汇编来写咯
点赞  2015-2-12 13:40
LZ弄的不错~~~  
点赞  2015-2-12 14:43
效果不错,应该是读取要写入的地方与要写入的数据进行运算后写入,用单片机会不会速度很慢。。。。。。。。。。。。
我的博客
点赞  2015-2-12 15:18
引用: zhaojun_xf 发表于 2015-2-12 15:18
效果不错,应该是读取要写入的地方与要写入的数据进行运算后写入,用单片机会不会速度很慢。。。。。。。。。。。。


恩,不过用stm32 感觉还行了。因为你不会刷得很频繁啊,如果只是几个简单的按键很快的

点赞  2015-2-12 15:31
做得很好。
LCD控制时,加上读屏里的数据,控制会更灵活。
点赞  2015-2-12 15:41
很不错的效果啊
So TM what......?
点赞  2015-2-12 18:12
很不错的
点赞  2015-2-13 23:48
很不错的!
点赞  2015-2-13 23:48
支持一下楼主!
点赞  2015-3-14 16:30
引用: zhangdaijinqf 发表于 2015-3-14 16:30
支持一下楼主!



谢谢
点赞  2015-3-16 13:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复