The surface class has the following member variables:
int m_iWidth, m_iHeight;
BYTE *m_pPixels, *m_pAlpha;
So the m_pPixels variable is sized based on m_iWidth*m_iHeight*2 and m_pAlpha is only half that size.
I've also got my own blit function that takes into account if the image has an alpha layer, and then uses Tala's single-multiply blending function, which is linked to earlier in this thread.
My new game engine is still evolving, but it works incredibly well for this stuff, and almost all of the little tidbits I use can be found scattered in the forums here.
