EVC下如何实现位图的透明效果?(高分请教高手)

wh_peng 2008-11-06 12:15:33
如题,先谢谢了
...全文
350 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
springsunglow 2008-12-07
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 wh_peng 的回复:]
谢谢楼上的

但为什么一定要乘以256吗?
我乘以512,1024然后再相应位移9位和10位,当透明度比较小的时候,会出现失真的情况,但是乘以256就不会的啊
[/Quote]

按道理是不会出现这样的问题,你是不是把
UINT iFixTransparency = (UINT)(iTransparency * 256);
UINT FixTransparency0 = (UINT)(Transparency0 * 256);
改为
unsigned short iFixTransparency = (UINT)(iTransparency * 256);
unsigned short FixTransparency0 = (UINT)(Transparency0 * 256);
之类的十六位整型了?这样的话会导致溢出的(而乘于256刚好不会溢出),要不你把代码贴出来,我们来看看哪里可能有问题?
xqhrs232 2008-11-18
  • 打赏
  • 举报
回复
mark
wh_peng 2008-11-18
  • 打赏
  • 举报
回复
可来改结贴了,哎。。。
wh_peng 2008-11-13
  • 打赏
  • 举报
回复
谢谢楼上的

但为什么一定要乘以256吗?
我乘以512,1024然后再相应位移9位和10位,当透明度比较小的时候,会出现失真的情况,但是乘以256就不会的啊
springsunglow 2008-11-13
  • 打赏
  • 举报
回复
你的事ARM处理器吗?在循环外先做浮点转整数的工作,然后在循环内只做整数运算试试。
BYTE btB,btG,btR,btB1,btG1,btR1;
UINT iFixTransparency = (UINT)(iTransparency * 256);
UINT FixTransparency0 = (UINT)(Transparency0 * 256);

for(int i = 0 ; i < nHeight ; i ++)
{
for(int j = 0 ; j < nWidth ; j++)
{
btB = pbtPixels[i * nWidth * nPixelSize + j * nPixelSize];
btG = pbtPixels[i * nWidth * nPixelSize + j * nPixelSize + 1 ];
btR = pbtPixels[i * nWidth * nPixelSize + j * nPixelSize + 2 ];

btB1 = pbtPixels1[i * nWidth * nPixelSize + j * nPixelSize];
btG1 = pbtPixels1[i * nWidth * nPixelSize + j * nPixelSize + 1];
btR1 = pbtPixels1[i * nWidth * nPixelSize + j * nPixelSize + 2];

btB = ((btB1 * iFixTransparency + FixTransparency0 * bt)>>8);
btG = (btG1 * iFixTransparency + FixTransparency0 * btG)>>8);
btR = ((btR1 * iFixTransparency + FixTransparency0 * btR)>>8);

pbtPixels[i * nWidth * nPixelSize + j * nPixelSize] = btB ;
pbtPixels[i * nWidth * nPixelSize + j * nPixelSize + 1] = btG;
pbtPixels[i * nWidth * nPixelSize + j * nPixelSize + 2] = btR;
}
}
wh_peng 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 91program 的回复:]
引用 18 楼 wh_peng 的回复:
听说嵌入汇编可以大大提高速度,可是我不懂汇编啊
在EVC中如何嵌入汇编呢?
等待懂汇编的高手


不用想这个问题了,效率也提高不了多少,特别是在应用层。
[/Quote]
----------------------------------------------
哎:)
lijinyan3000 2008-11-12
  • 打赏
  • 举报
回复
学习。
91program 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wh_peng 的回复:]
听说嵌入汇编可以大大提高速度,可是我不懂汇编啊
在EVC中如何嵌入汇编呢?
等待懂汇编的高手
[/Quote]

不用想这个问题了,效率也提高不了多少,特别是在应用层。
wh_peng 2008-11-12
  • 打赏
  • 举报
回复
听说嵌入汇编可以大大提高速度,可是我不懂汇编啊
在EVC中如何嵌入汇编呢?
等待懂汇编的高手
wh_peng 2008-11-11
  • 打赏
  • 举报
回复
继续等待
wh_peng 2008-11-11
  • 打赏
  • 举报
回复
载舟之水 2008-11-10
  • 打赏
  • 举报
回复
自己写的和系统那个效率是差不多的,而且你问题没说清楚,要的是半透明的效果,而不是透明效果。
你可以考虑不用所有像素都做alpha混合运算的
91program 2008-11-10
  • 打赏
  • 举报
回复
如果要实现半透明,可以试试DirectDraw的overlay,效率会好一些。
wh_peng 2008-11-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 nbcool 的回复:]
自己写的和系统那个效率是差不多的,而且你问题没说清楚,要的是半透明的效果,而不是透明效果。
你可以考虑不用所有像素都做alpha混合运算的
[/Quote]
--------------------------------------------------------------------------------
半透明效果的话,就是乘以0.5,相当于向右位移一位,这时候可以用位移代替乘法,这样速度是很快的,

但是透明度不是0.5的话不能这样替换了,所以按以上的方法,速度很慢,不知道如何优化

wh_peng 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lenux 的回复:]
这个问题貌似被提过多次了。

lz为什么不先搜索一下历史记录呢!!
[/Quote]
-----------------------------
是吗
beyondma 2008-11-07
  • 打赏
  • 举报
回复
TransparentBlt()这个是画掩码,比如你一张方图,只有中间的圆形区域是图像信息,那么你就把背景色设上,这样再画这幅图的时候背景就会被透明了,还有个ALPHABLEN,也就是@混合,是把一幅图透明的贴在另一幅图上。不知道你需求的是哪个,看看GDI的相关资料吧。
11000000 2008-11-07
  • 打赏
  • 举报
回复
过来学习。
Reallyu 2008-11-07
  • 打赏
  • 举报
回复
还有 TransparentImage, 呵呵,来混分
lenux 2008-11-07
  • 打赏
  • 举报
回复
这个问题貌似被提过多次了。

lz为什么不先搜索一下历史记录呢!!
wh_peng 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 BEYONDMA 的回复:]
不是吧,都说了系统自带@混合的API了:)ALPHABLEND啊。
[/Quote]
--------------------------------------------------
ALPHABLEND是WINCE5.0以上版本才能用吧
我用的是WINCE4.0
加载更多回复(6)

19,502

社区成员

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

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