Would you believe that it is the way D3DX saves out to PNG files? If I change the format to use DDS or BMP files, it works. The downside to that is the file size grows quite a bit. It still loads quickly, but the file is a lot larger. As a comparison, my test file is 51KB as PNG, 277KB as BMP and 369KB as DDS.

So D3DX can load alpha from PNG files ok, but if you save the texture back out to a file using D3DX and load it again using D3DX, the alpha no longer works. The alpha is there in the image. I tested this by loading the saved PNG into PaintShop Pro and the alpha channel is there. Something goes wrong, but I cannot tell what.

To test the fix, search in OmegaImageList.pas for D3DXIFF_PNG and change it to D3DXIFF_DDS or D3DXIFF_BMP. Save out your image lists again from the original source images and try loading them. The alpha should work now.