The 2 bytes are the ushort of each pixel value of 0 - 65K range. If I got you right, the WB has each pixel described by 4 bytes of ARGB. So far so good.
If I allocate new WriteableBitmap(512, 512), I actually allocate 512 x 512 x 4, right? If you confirm, then I need to convert my ushort pixel value to byte and do something like below in my for loop:
pixel = wb.Pixels[y * wb.PixelWidth + x];
d = BitConverter.GetBytes(pixel);
d = ushortPixel2Byte(ushort pixvalue);
//last convert it back to my wb
wb.Pixels[y * wb.PixelWidth + x] =
//end of for loop
Did I get your suggestion right?
d = d;//all the same for grey scale bitmap
d = d;
d = d;