图片渐进渐出效果

wh_peng 2009-02-07 12:16:45
RT,要实现图片渐进渐出效果,
我是通过改变图片透明度来做的,但是这样速度太慢了,不行啊;
有什么好的算法或者资料吗?
谢谢!
...全文
567 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
hemingxiang 2009-12-17
  • 打赏
  • 举报
回复
直观的方法是:
1。保存前后两张图片各象素的RGB值,
2,保存前后两张图各对应象素RGB差值除以N后的值D(i,j),
3。前一张图像的各RGB每次减去对应的D(i,j)后,进行显示,N次后过度到后一张图像,
我的电脑上500x400的图片全屏显示要20秒
xajhuang 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wh_peng 的回复:]
引用 15 楼 xajhuang 的回复:
楼上说的 AlphaBlend API
最好的答案,不过这个最少需要 WinCE 5.0 的支持,还要你的 PB 中添加了这个选项才能用

-----------------------------------------------
我用的版本是Wince4.0。
那没有其它方法了吗
[/Quote]

那就只有按找上面帖子里面的公式 自己计算像素的RGB值了
navi_dx 2009-02-16
  • 打赏
  • 举报
回复
这个方法计算一个像素Alpha混合要6次乘法,确实比较慢,如果用16位色计算,一个像素2次乘法就够了
gelu1040 2009-02-16
  • 打赏
  • 举报
回复
闭塞:一帧图象发送完成后再显示,送到GRAM 的数据不是一进去就更新显示器的.
一般如果用显示效果的,过程都会持续在秒级,所以这个跟CUP的实行速度没多大关系,一般都可以胜任.
看看驱动,驱动不提供自己研究显示控制器加上

wh_peng 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 xajhuang 的回复:]
引用 16 楼 wh_peng 的回复:
引用 15 楼 xajhuang 的回复:
楼上说的 AlphaBlend API
最好的答案,不过这个最少需要 WinCE 5.0 的支持,还要你的 PB 中添加了这个选项才能用

-----------------------------------------------
我用的版本是Wince4.0。
那没有其它方法了吗


那就只有按找上面帖子里面的公式 自己计算像素的RGB值了
[/Quote]
-----------------------------------------------
我先试试
wh_peng 2009-02-14
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 gelu1040 的回复:]
引用 11 楼 yihan7h 的回复:
说一下大概思路,分别获取2张图所有像素点的RGB分量:
r0 g0 b0 , r3 g3 b3
i=0;
while(i <=255)
{
r2=(r0*i+ r3*(255-i))/255;
g2=(g0*i+ g3*(255-i))/255;
b2=(b0*i+ b3*(255-i))/255;
}
sleep(sometime);
显示获得的新的像素点阵……
这样可以实现淡入淡出


同意11楼的方法思路.补充的是在循环里面加上
i+=d;//阶跃大小,
效果好点
别忘记整图数据送出后 …
[/Quote]
----------------------------------------
我想问一下,什么是硬件系统具有"闭塞"功能?我不懂硬件的,怎么知道硬件有没有这个功能?
还有就是说这个算法我就担心速度很慢,毕竟是CE系统,又不是PC
yihan7h 2009-02-14
  • 打赏
  • 举报
回复
速度慢不慢你试试才知道,应该没有问题。
sleep(sometime);//视你渐变一次的需要的时长而定
xajhuang 2009-02-13
  • 打赏
  • 举报
回复
楼上说的 AlphaBlend API
最好的答案,不过这个最少需要 WinCE 5.0 的支持,还要你的 PB 中添加了这个选项才能用
zpk1234 2009-02-13
  • 打赏
  • 举报
回复
用AlphaBlend函数
通过改变结构体BLENDFUNCTION的SourceConstantAlpha的值即可实现淡入淡出,
SourceConstantAlpha = 255时 完全不透明
SourceConstantAlpha = 0 时 完全透明
gelu1040 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yihan7h 的回复:]
说一下大概思路,分别获取2张图所有像素点的RGB分量:
r0 g0 b0 , r3 g3 b3
i=0;
while(i <=255)
{
r2=(r0*i+ r3*(255-i))/255;
g2=(g0*i+ g3*(255-i))/255;
b2=(b0*i+ b3*(255-i))/255;
}
sleep(sometime);
显示获得的新的像素点阵……
这样可以实现淡入淡出
[/Quote]

同意11楼的方法思路.补充的是在循环里面加上
i+=d;//阶跃大小,
效果好点
别忘记整图数据送出后
delayms(dtime);
如果你要求的时间在秒级别的话,效果都是一样的,

问题的必要条件是:你的硬件系统具有"闭塞"功能. 不然,再快的CPU也做不到你要的效果
jinlking 2009-02-13
  • 打赏
  • 举报
回复
怎么不行的?
不断改变透明度就可以了啊
如果图片很大,或者硬件不行的话可能会很卡
wh_peng 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jinlking 的回复:]
自己实现透明算法
[/Quote]
-----------------------------
透明我已经做了,用控制透明度来实现淡进淡出效果不行
LinHanLao 2009-02-13
  • 打赏
  • 举报
回复
看看DirectDraw方面的资料,可能有这方面的接口
jinlking 2009-02-13
  • 打赏
  • 举报
回复
自己实现透明算法
wh_peng 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xajhuang 的回复:]
楼上说的 AlphaBlend API
最好的答案,不过这个最少需要 WinCE 5.0 的支持,还要你的 PB 中添加了这个选项才能用
[/Quote]
-----------------------------------------------
我用的版本是Wince4.0。
那没有其它方法了吗
jgj58 2009-02-12
  • 打赏
  • 举报
回复
记得在VC开发里有位图动画技术可以实现图片从隐到显的效果。在VC++100例有例子。
楼主可以参考移植过来。
wh_peng 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yihan7h 的回复:]
说一下大概思路,分别获取2张图所有像素点的RGB分量:
r0 g0 b0 , r3 g3 b3
i=0;
while(i <=255)
{
r2=(r0*i+ r3*(255-i))/255;
g2=(g0*i+ g3*(255-i))/255;
b2=(b0*i+ b3*(255-i))/255;
}
sleep(sometime);
显示获得的新的像素点阵……
这样可以实现淡入淡出
[/Quote]
------------------------------------------
这样对每个像素计算的算法,效率,速度不是会很慢吗?这样效果不行的
yihan7h 2009-02-10
  • 打赏
  • 举报
回复
或者用AlphaBlend 也可以……
yihan7h 2009-02-10
  • 打赏
  • 举报
回复
说一下大概思路,分别获取2张图所有像素点的RGB分量:
r0 g0 b0 , r3 g3 b3
i=0;
while(i<=255)
{
r2=(r0*i+ r3*(255-i))/255;
g2=(g0*i+ g3*(255-i))/255;
b2=(b0*i+ b3*(255-i))/255;
}
sleep(sometime);
显示获得的新的像素点阵……
这样可以实现淡入淡出
wh_peng 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 91program 的回复:]
LZ的透明效果具体是如何实现的?

如果LZ想要透明那样的效果,在EVC下估计没有什么现成的好的算法。只能自己研究算法!
[/Quote]
---------------------------------------------------------------------
透明我是通过对原位图和底图进行乘法实现的。
难道以前没人做过这个算法吗,也没什么资料吗
加载更多回复(9)

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧