红叶嵌入式淘宝专卖:http://zsystm32.taobao.com/CopyrightCopyrightCopyrightCopyright@2012@2012@2012@2012红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室ALLALLALLALLrightsrightsrightsrightsreservedreservedreservedreserved红叶STM32入门系列教程超强图形API,支持半透明效果渲染汉字,图片,图标Revision1.0(2012-1-1)红叶嵌入式红叶嵌入式淘宝专卖:http://zsystm32.taobao.com/CopyrightCopyrightCopyrightCopyright@2012@2012@2012@2012红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室ALLALLALLALLrightsrightsrightsrightsreservedreservedreservedreserved21.1.1.1.基本知识讲解如何让图层之间显示半透明效果呢,以一个像素点来做通俗说明,只要让上层图层和底层图层的颜色信息加以混合,成为一个新的像素点,那么这个新的像素点包含有2个图层的颜色信息,从视觉上就能看到2个图层的效果,及有一定透明度的效果。如何实现这样的混合呢,下面以计算公式说明。假设底层图层的一个像素点为B,顶层的一个像素点为T。对于B来说,它的颜色值为Cb。其中红绿蓝的颜色分分别为Rb,Gb,Bb,暂存变量为Rb_temp,Gb_temp,Bb_temp对于T来说,它的颜色值为Ct。其中红绿蓝的颜色分分别为Rt,Gt,Bt,暂存变量为Rt_temp,Gt_temp,Bt_temp然后新的颜色值为Cnew,颜色分量为Rnew,Gnew,Bnew。现在我们设定不透明度的值为Trans,取值范围为0-1,但是为了避免浮点运算我们把范围取0-100,运算的时候要除以100(因为扩大了100倍嘛)。我们先对顶层像素的颜色通道进行alpha的加权运算Rt_temp=Rt*Trans/100Gt_temp=Gt*Trans/100Bt_temp=Bt*Trans/100然后对底层像素的颜色通道进行alpha的加权运算Rb_temp=Rb*(100-Trans)/100Gb_temp=Gb*(100-Trans)/100Bb_temp=Bt*(100-Trans)/100最后进行合成Rnew=Rt_temp+Rb_tempGnew=Gt_temp+Gb_tempBnew=Bt_temp+Bb_temp我们的液晶屏是16位色的,那么最后Cnew也是16位的Cnew=Rnew<<11+Gnew<<5+Bnew,其中Rnew,Gnew,Bnew均要为16位的变量。2.2.2.2.硬件设计无3.3.3.3.实验效果在屏幕上进行各种图案的绘制,演示了文字,图片,图标,案件,截屏等功能,最后把整个屏幕截取下来并保存成bmp格式的图片,下面就把这个保存在SD卡中的图片贴出来,作为实验效果图,如图3.1所示。红叶嵌入式淘宝专卖:http://zsystm32.taobao.com/CopyrightCopyrightCopyrightCopyright@2012@2012@2012@2012红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室ALLALLALLALLrightsrightsrightsrightsreservedreservedreservedreserved3图3.14.4.4.4.代码讲解4.1工程文件结构红叶嵌入式淘宝专卖:http://zsystm32.taobao.com/CopyrightCopyrightCopyrightCopyright@2012@2012@2012@2012红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室红叶嵌入式工作室ALLALLALLALLrightsrightsrightsrightsreservedreservedreservedreserved4配置文件:修改stm32f10x_conf.h,启用下列头文件:#include"stm32f10x_gpio.h"#include"stm32f10x_rcc.h"#include"stm32f10x_usart.h"#include"stm32f10x_fsmc.h"#include"stm32f10x_tim.h"#include"stm32f10x_dma.h"#include"stm32f10x_sdio.h"#include"stm32f10x_bkp.h"#include"stm32f10x_pwr.h"#include"stm32f10x_rtc.h"#include"stm32f10x_exti.h"#include"misc.h"在main.h额外中添加:#include"Public_API.h"4.2代码剖析我们先看main函数,这个实验我们用到了SD卡,FATFS文件系统以及LCD。然后结合我们的Public_API.c,里边有各种功能的绘图函数,利用它们,我们可以画出多彩多姿的界面来。高级例程中的多功能MP3里的界面都是利用Public_API.c里的绘图功能完成的。先看代码,如图4.2.1所示。先使用BmpDecode("0:/PICTURE/梦幻图腾.bmp")解码函数加载一幅背景图片。然后绘制不同透明度和不同样式的矩形,图标。接着演示利用GUI_Disp_PicRect()来截取SD卡中的一个bin格式的图片的一部分然后显示在屏幕的右下角。最后我们把整个屏幕当前的图像以bmp格式的图片保存在SD卡中,前面四个参数代表...