public byte[] GetRawData()
        {
            int newHeaderDataSize = 28;

            if (this.transparencybit)
            {
                newHeaderDataSize += 4;
            }
            if (this.extra2)
            {
                newHeaderDataSize += 8;
            }

            byte[] newHeaderData = new byte[newHeaderDataSize];

            int flags = 0;

            //set extra bit value
            CGeneric.SetBitInInt(ref flags, 22, this.transparencybit);
            CGeneric.SetBitInInt(ref flags, 26, this.extra2);

            //set unknown bit values
            CGeneric.SetBitInInt(ref flags, 19, this.bit19);
            CGeneric.SetBitInInt(ref flags, 20, this.bit20);
            CGeneric.SetBitInInt(ref flags, 21, this.bit21);
            CGeneric.SetBitInInt(ref flags, 23, this.bit23);
            CGeneric.SetBitInInt(ref flags, 24, this.bit24);
            CGeneric.SetBitInInt(ref flags, 25, this.bit25);
            CGeneric.SetBitInInt(ref flags, 27, this.bit27);
            CGeneric.SetBitInInt(ref flags, 28, this.bit28);
            CGeneric.SetBitInInt(ref flags, 29, this.bit29);
            CGeneric.SetBitInInt(ref flags, 30, this.bit30);
            CGeneric.SetBitInInt(ref flags, 31, this.bit31);
            CGeneric.SetBitInInt(ref flags, 32, this.bit32);

            Array.Copy(CGeneric.ConvertIntToByteArray(flags), 0, newHeaderData, 0, 4);
            Array.Copy(CGeneric.ConvertIntToByteArray(posX), 0, newHeaderData, 4, 4);
            Array.Copy(CGeneric.ConvertIntToByteArray(posY), 0, newHeaderData, 8, 4);

            //copy unknown data
            Array.Copy(rawData, 12, newHeaderData, 12, 16);

            newHeaderData[27] = this.textureIndex;
            if (transparencybit)
            {
                newHeaderData[31] = transparency;
            }
            return(newHeaderData);
        }