/// <summary>
        /// Make a copy of the palette, tile it, and write the palette to the stream using set pixel format.
        /// </summary>
        private void WritePalette(BinaryWriter writer)
        {
            int paletteWH = PS2PixelFormatHelper.GetPaletteDimension(RasterInfoStructNode.Tex0Register.TexturePixelFormat);

            Color[] outPalette;

            if (paletteWH == 16)
            {
                PS2PixelFormatHelper.TilePalette(mPalette, out outPalette);
            }
            else
            {
                outPalette = mPalette;
            }

            switch (RasterInfoStructNode.Tex0Register.ClutPixelFormat)
            {
            case PS2PixelFormat.PSMZ32:
            case PS2PixelFormat.PSMTC32:
                PS2PixelFormatHelper.WritePSMCT32(writer, paletteWH, paletteWH, outPalette);
                break;

            case PS2PixelFormat.PSMZ24:
            case PS2PixelFormat.PSMTC24:
                PS2PixelFormatHelper.WritePSMCT24(writer, paletteWH, paletteWH, outPalette);
                break;

            case PS2PixelFormat.PSMZ16:
            case PS2PixelFormat.PSMTC16:
                PS2PixelFormatHelper.WritePSMCT16(writer, paletteWH, paletteWH, outPalette);
                break;

            case PS2PixelFormat.PSMZ16S:
            case PS2PixelFormat.PSMTC16S:
                PS2PixelFormatHelper.WritePSMCT16S(writer, paletteWH, paletteWH, outPalette);
                break;

            default:
                throw new NotImplementedException();
            }
        }