社区
图形处理/算法
帖子详情
急救!如何提高 AlphaBlend 函数的执行速度?
七伤拳
2002-11-04 10:59:15
我现在用 Alpha 通道逐点贴图画一条带透明效果的线条,但是速度很慢,鼠标拖动时绘图明显画线跟不上鼠标移动速度。
请问要如何才能提高速度?我想此函数的实现应该已经经过优化了的,为什么还会这么慢?有没有替代的方法?
...全文
129
8
打赏
收藏
急救!如何提高 AlphaBlend 函数的执行速度?
我现在用 Alpha 通道逐点贴图画一条带透明效果的线条,但是速度很慢,鼠标拖动时绘图明显画线跟不上鼠标移动速度。 请问要如何才能提高速度?我想此函数的实现应该已经经过优化了的,为什么还会这么慢?有没有替代的方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
s6283
2002-11-04
打赏
举报
回复
MMX
七伤拳
2002-11-04
打赏
举报
回复
要在WIN98下面运行的,不能用GDI+
kingcom
2002-11-04
打赏
举报
回复
用GDI+行不行???我记得GDI+里面很多都有一个alpha参数...
七伤拳
2002-11-04
打赏
举报
回复
现在就是用 AlphaBlend 函数,结合 LineDDA 画线,结果线宽一大就不行了,速度很慢。
harry202
2002-11-04
打赏
举报
回复
另外,如果你只是一条线,那计算量应该不大,可以考虑使用WINAPI AlphaBlend函数替代。
harry202
2002-11-04
打赏
举报
回复
目前在wintel结构下,最快的alpha混合方法是使用intel提供的汇编算法。
你可以去intel.com查找“Instructions to Implement Alpha Blending“
有源代码。不过如果你的汇编功力不足,用在vc里面比较麻烦。
harry202
2002-11-04
打赏
举报
回复
还有一个折衷的办法,但是只能50%透明,且只能用在纯色填充的对象上。
方法是使用棋盘网格画刷,这样一个像素透明,一个像素不透明,就有了半透明的效果(利用了人眼的视觉误差),看起来就像薄纱。这个办法速度很快。
代码如下:
int nsave = dc.SaveDC();
const unsigned short ChessBoard[] = {0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55};
HBITMAP hBitmap = CreateBitmap(8,8,1,1,ChessBoard);
HBRUSH hBrush = CreatePatternBrush(hBitmap);
DeleteObject(hBitmap);
HGDIOBJ hOldBrush = SelectObject(dc.m_hDC,hBrush);
HGDIOBJ hOldPen = SelectObject(dc.m_hDC,GetStockObject(NULL_PEN));
dc.SetROP2(R2_MASKPEN);
dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.Rectangle(yourRect);//你的线条矩形
dc.SetROP2(R2_MERGEPEN);
dc.SetBkColor(RGB(0,0,0));
dc.SetTextColor(m_backColor);//线条颜色
dc.Rectangle(yourRect);
SelectObject(dc.m_hDC,hOldBrush);
SelectObject(dc.m_hDC,hOldPen);
DeleteObject(hBrush);
dc.RestoreDC(nsave);
---------------------
harry202
2002-11-04
打赏
举报
回复
GDI+速度比GDI慢1个数量级。
Intel的代码就使用了mmx指令
精选_使用
Alpha
Blend
函数
实现位图半透明绘制_源码打包
使用
Alpha
Blend
函数
实现位图半透明绘制
使用
Alpha
Blend
函数
使用
Alpha
Blend
函数
生成透明启动画面的示例应用程序
Microsoft
Blend
2019/C#/.NET/MVVM/WCF/XAML/WPF/UWP
本课程主要讲解Microsoft
Blend
For Visual Studio 2019,帮你一步步掌握Microsoft
Blend
的那令人激动的超强功能。如果你正在使用WPF、UWP技术进行开发,你一定需要学习Microsoft
Blend
,在这里你会发现,只需动动...
Alpha
Blend
图片透明过渡动画特效
这个代码详细示例了API
函数
Alpha
Blend
把图片透明过渡的动画特效,一个比较易学的示例.
Alpha
Blend
可编程通道实现Color混合,
Alpha
混合,实现一些透明效果.
图形处理/算法
19,469
社区成员
50,697
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章