为一个24位位图添加alpha数据速度太慢?

zzz822163 2009-01-07 05:56:34

for (unsigned int src = 0, dst = 0; src < bi.biSizeImage; src +=3, dst +=4)
{

m_ListVideo[dex].data_avi_new[dst+3] = 0xFF;

// copy pixel data over
m_ListVideo[dex].data_avi_new[dst] = bitmapImage[src];
m_ListVideo[dex].data_avi_new[dst+1] = bitmapImage[src+1];
m_ListVideo[dex].data_avi_new[dst+2] = bitmapImage[src+2];
}

因为是实时数据,所以影响太大....有好方法没?
...全文
102 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-01-08
  • 打赏
  • 举报
回复
嵌汇编来优化:
PVOID p1 = bitmapImage;
PVOID p2 = m_ListVideo[dex].data_avi_new;
unsigned number = bi.biSizeImage/3;
__asm {
pushad
mov al, 0xff
mov ecx, number
mov esi, p1
mov edi, p2
lp:
movsw
movsb
stosb
loop lp
popad
}
菜牛 2009-01-08
  • 打赏
  • 举报
回复
以下方法可能可以稍有加快:
for (unsigned int src = 0, dst = 0; src < bi.biSizeImage; src +=3, dst +=4)
{
*((DWORD*)m_ListVideo[dex].data_avi_new[dst]) = (*((DWORD*)bitmapImage[src])) | 0xFF000000;
}
zzz822163 2009-01-08
  • 打赏
  • 举报
回复
谢谢cnzdgs ,汇编就是牛啊
我之前添加alpha导致FPS从50降到10,用你的代码之后升到了38,

TO Tinary3v0
我也不想拘泥于形式,不过用了CEGUI,不使用alpha格式图片就无法正常显示.
Tinary3v0 2009-01-07
  • 打赏
  • 举报
回复
这样移动添加 移动添加 恐怕是没办法快了
如果可以 干脆再建立一个专门的透明度文件 来标明原图中某个像素的透明度吧

如果10*10的图像 你可以定义一个
char alph[10][10];来存储透明度数据

既然时时性要求高又何必拘泥于图像固有格式呢,在显示的时候再进行一下运算就可以了。
透明度运算应该不会浪费很多计算的 因为即便是标准格式也难免要做响应计算。

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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