OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8503|回复: 9

mp3的界面,不知道怎么能做出那种透明色的效果来?大家指点下小弟

[复制链接]

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-9-5
在线时间
0 小时
发表于 2012-12-13 19:44:52 | 显示全部楼层 |阅读模式

    漂亮的界面的那种透明色,还有那种过渡得很平滑的色彩,不知是怎样做出来的?
    那种不覆盖背景图片的半透明色

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2012-12-13 20:36:23 | 显示全部楼层
回复【楼主位】studentkarlxie:
---------------------------------
颜色叠加的效果,与底色进行运算。看到过。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-13 23:39:45 | 显示全部楼层
可以做出来的,骤雨龙元的F4开发板,就有。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-9-5
在线时间
0 小时
 楼主| 发表于 2012-12-15 12:00:44 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------嗯嗯,是可以做出来,一个叠加色和底色的一个叠加算法函数
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-9-5
在线时间
0 小时
 楼主| 发表于 2012-12-15 12:05:11 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,还有一个问题就是!我显示的歌名是透明色,叠加在播放界面的背景图片上!但是我换下一首歌的时候,要清除上一首的歌名,但是又要恢复之前显示歌名信息栏那一块的背景,然后新歌名信息在和背景色叠加!现在在想,有什么好的方法在每次信息更改前,恢复之前的背景图片,不需要整个背景图片刷,而只要显示歌名信息那一小块的背景图片需要恢复
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-15 12:46:33 | 显示全部楼层
保存那部分区域的原始数据即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
发表于 2012-12-15 13:36:01 | 显示全部楼层
回复【楼主位】studentkarlxie:
---------------------------------
http://www.openedv.com/posts/list/4691.htm
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
发表于 2012-12-15 13:45:03 | 显示全部楼层

FIL ICON_FIL; /* 图标文件结构体 */
UINT RestBytes; /* 文件剩余的字节数 */

u8 ICON_Buf[512]; /* 缓冲区 */

u16 alpha_blend565(u16 src,u16 dst,u8 alpha) 
u32 src2; 
u32 dst2;  
src2=((src<<16)|src)&0x07E0F81F; 
dst2=((dst<<16)|dst)&0x07E0F81F;    
dst2=((((dst2-src2)*alpha)>>5)+src2)&0x07E0F81F; 
return (dst2>>16)|dst2;   
}  

void BmpIconDecode(u16 startx, u16 starty,const char *filename)
{
BMP_FILEHEADER *p;
  u16 i,x,color,tmp ;    
u16 read = 512;
u8 alpha;
u16 ICON_Height,ICON_Width;

f_read(&ICON_FIL,ICON_Buf,read,&RestBytes);/* 预读 512 字节 */

p = (BMP_FILEHEADER*)ICON_Buf; /* 获取 bmp 文件头 */
ICON_Height = p->biHeight; /* 获取 bmp 高度 */
ICON_Width = p->biWidth; /* 获取 bmp 宽度 */
   
f_lseek(&ICON_FIL,p->bfOffBits);/* 移动数据指针至 bmp真实数据存储区 */
f_read(&ICON_FIL,ICON_Buf,read,&RestBytes);//读取512字节
while(1)
{  
for(i=0;i<read;i+=4)/* bmp 为32 bit, 一定可以被 4 整除 */
 {
color = 0;/* 清除上次留下的颜色 */
tmp = ICON_Buf;  color |= tmp>>3; /* 获取 B 通道  */
tmp = ICON_Buf[i+1]; tmp >>= 2; color |= tmp<<5; /* 获取 G 通道 */
tmp = ICON_Buf[i+2]; tmp >>= 3; color |= tmp<<11;  /* 获取 R 通道 */
alpha = ICON_Buf[i+3]; /* 获取 Alpha 通道 */
if(alpha!=0xff) /* 如果是完全不透明则跳过读点过程 */
{
tmp = LCD_ReadPixel(startx+x,starty+ICON_Height);
color = alpha_blend565(tmp,color,alpha/8);
}
if(x<ICON_Width)/* 在图标宽度内则画点 */      
LCD_WritePixel(startx+x,starty+ICON_Height,color);   
else
{  
ICON_Height--; 
if(ICON_Height<=0)break; 
x = 0; 
}
x++;/* 横坐标加 1 */
if((RestBytes<read)&&(RestBytes!=0))read = RestBytes;
else if(RestBytes==0)break; /* 文件读取完毕 */
if(f_read(&ICON_FIL,ICON_Buf,read,&RestBytes)!=FR_OK)break;/* 读取 512 字节 */
}
}


void GUI_DrawICON(u16 startx,u16 starty,const TCHAR *filename)
{
RestBytes = 0; /* 文件剩余字节数置 0 */
if(f_open(&ICON_FIL,filename,FA_READ) == FR_OK)
BmpIconDecode(startx,starty,filename);
f_close(&ICON_FIL);/* 关闭打开的文件 */
}


核心部分在黄色区域。

如图,上效果:






原理:  32位 bmp 图片第四字节保存的是alpha通道,也就是搞透明的,这个值就是这个点透明度吧,与底色按照这个比例进行混合,看到的就是透明效果。






for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-15 20:02:29 | 显示全部楼层
楼上的界面很漂亮啊,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-9-5
在线时间
0 小时
 楼主| 发表于 2012-12-18 19:21:01 | 显示全部楼层
回复【8楼】subo19920716:
---------------------------------
哈哈,非常漂亮!你大二就这么厉害啦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 09:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表