Direct3D9和DirectDshow的RGB位图

今天遇到位图格式问题,经过亲自验证,得到以下结论:


  对于Direct3D9的D3DFMT_A8R8G8B8纹理:

    按照字节顺序,每个像素的组成是:B1,G1,R1,A1,B2,G2,R2,A2 。。。

    对应PShader的float4的话,R对应X,G对应Y,B对应Z,A对应W


  对于Direct3D9的D3DFMT_X8R8G8B8纹理:

    按照字节顺序,每个像素的组成是:B1,G1,R1,?1,B2,G2,R2,?2 。。。

    对应PShader的float4的话,R对应X,G对应Y,B对应Z,?对应W


  对于DirectShow的MediaSubType_ARGB32帧:

    按照字节顺序,每个像素的组成是:B1,G1,R1,A1,B2,G2,R2,A2 。。。

    (和D3DFMT_A8R8G8B8一样)


  对于DirectShow的MediaSubType_RGB32帧:

    按照字节顺序,每个像素的组成是:B1,G1,R1,?1,B2,G2,R2,?2 。。。 

    (和D3DFMT_X8R8G8B8一样)


  对于DirectShow的MediaSubType_YUYV帧:

    按照字节顺序,两个像素的组成是:Y1,U12,Y2,V12,Y3,U34,Y4,V34 。。。

    (注意了,ARGB格式是BGRA字节次序,YUYV格式是YUYV字节次序)


总结以上的各项,凡是RGB色系的位图,都是按照从高位到低位的次序来描述,

    凡是YUV色系的位图,都是按照字节从开始到结束的次序来描述,正好相反,

    到了Shader里面,像素的字节次序从BGRA变成RGBA了(至少AMD显卡是这样);


你可能感兴趣的:(Direct3D9和DirectDshow的RGB位图)