public DDS(string fileName, byte[] data) : base(fileName, data) // call the base constructor { byte[] buffer = headData; // put data inside DDSHeader GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); DDSHeader = (_DDSHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(_DDSHeader)); handle.Free(); imgSize = new ImageSize(DDSHeader.Width, DDSHeader.Height); format = subtype(); switch (format) { case "DXT1": BPP = 0.5F; break; case "DXT5": case "ATI2": BPP = 1F; break; case "V8U8": BPP = 2F; break; default: BPP = (float)DDSHeader.RGBBitCount / 8; break; } }