Why not sas? probably because you can't in vb.
Tell me why you need a long array because what youre doing seems like a waste of cpu.
Then I populate the BITMAPFILEHEADER and BITMAPINFO structures and write them to a file in binary mode using fwrite...

... I used the Picture1.Picture=LoadBitmap("blah.bmp") method. This is on a 500mhz AMD processor and reading from a mapped network drive. Not too shabby. I know I kind of cheesed out and didn't use vb but I was in it for the speed, and i am not so sure if I could have done it this fast in VB.
In fact the part buffering the bitmap on the harddisk is totally unnessesary. Since you've thrown the headers for bitmap together the next step would be to use CreateDIBitmap with a pointer to DATA and a DC you could pass as a parameter from vb.