2013-03-07 111 views
1

我有一个缓冲区包含一个“原始”BGRA纹理,每个颜色一个字节。 线条以相反的顺序(纹理颠倒)。BGRA - > RGBA和垂直翻转,OptiX

BGRA缓冲区全部为绿色(0,255,0,255)。

我需要将其转换为RGBA并翻转纹理线。 我尝试这样做:

// bgra is an unsigned char* 

int width = 1366; 
int height = 768;  

unsigned char* rgba = new unsigned char[width * height * 4]; 

for(int y = height - 1; y >= 0; y--) 
{ 
    for(int x = 0; x < width; x++) 
    { 
     rgba[(x * y * 4)]  = bgra[(x * y * 4) + 2]; 
     rgba[(x * y * 4) + 1] = bgra[(x * y * 4) + 1]; 
     rgba[(x * y * 4) + 2] = bgra[(x * y * 4)]; 
     rgba[(x * y * 4) + 3] = bgra[(x * y * 4) + 3]; 
    } 
} 

但渲染时的结果不是一个完整的绿色屏障,但这:

什么可能我是错在这里干什么?

回答

5

你索引错误。

这是应该怎么做:

rgba[(x + y * width) * 4]  = bgra[(x + y * width) * 4 + 2] 
+0

谢谢你,我的索引是关闭的。但是,那不是我唯一的问题。编辑的问题。 – EClaesson 2013-03-07 04:51:46

+0

索引编制是个问题,它在代码中也被打破了。谢谢。 – EClaesson 2013-03-07 05:47:13