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];
}因为是实时数据,所以影响太大....有好方法没?

解决方案 »

  1.   

    这样移动添加 移动添加 恐怕是没办法快了 
    如果可以 干脆再建立一个专门的透明度文件 来标明原图中某个像素的透明度吧 如果10*10的图像 你可以定义一个
    char alph[10][10];来存储透明度数据既然时时性要求高又何必拘泥于图像固有格式呢,在显示的时候再进行一下运算就可以了。
    透明度运算应该不会浪费很多计算的 因为即便是标准格式也难免要做响应计算。 
      

  2.   

    以下方法可能可以稍有加快:
    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;
            }
      

  3.   

    嵌汇编来优化:
    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
    }
      

  4.   

    谢谢cnzdgs ,汇编就是牛啊
    我之前添加alpha导致FPS从50降到10,用你的代码之后升到了38,TO Tinary3v0 
    我也不想拘泥于形式,不过用了CEGUI,不使用alpha格式图片就无法正常显示.