private void createFromImages(Image[] images, TPL_TextureFormat[] tplFormats, TPL_PaletteFormat[] paletteFormats) { tplHeader = new TPL_Header(); tplTextureEntries = new List<TPL_TextureEntry>(); tplTextureHeaders = new List<TPL_TextureHeader>(); tplPaletteHeaders = new List<TPL_PaletteHeader>(); textureData = new List<byte[]>(); paletteData = new List<byte[]>(); tplHeader.NumOfTextures = (uint)images.Length; for (int i = 0; i < images.Length; i++) { Image img = images[i]; TPL_TextureEntry tempTexture = new TPL_TextureEntry(); TPL_TextureHeader tempTextureHeader = new TPL_TextureHeader(); TPL_PaletteHeader tempPaletteHeader = new TPL_PaletteHeader(); byte[] tempTextureData = imageToTpl(img, tplFormats[i]); byte[] tempPaletteData = new byte[0]; tempTextureHeader.TextureHeight = (ushort)img.Height; tempTextureHeader.TextureWidth = (ushort)img.Width; tempTextureHeader.TextureFormat = (uint)tplFormats[i]; if (tplFormats[i] == TPL_TextureFormat.CI4 || tplFormats[i] == TPL_TextureFormat.CI8 || tplFormats[i] == TPL_TextureFormat.CI14X2) { ColorIndexConverter cic = new ColorIndexConverter(imageToRgba(img), img.Width, img.Height, tplFormats[i], paletteFormats[i]); tempTextureData = cic.Data; tempPaletteData = cic.Palette; tempPaletteHeader.NumberOfItems = (ushort)(tempPaletteData.Length / 2); tempPaletteHeader.PaletteFormat = (uint)paletteFormats[i]; } tplTextureEntries.Add(tempTexture); tplTextureHeaders.Add(tempTextureHeader); tplPaletteHeaders.Add(tempPaletteHeader); textureData.Add(tempTextureData); paletteData.Add(tempPaletteData); } }
/// <summary> /// Adds a Texture to the TPL. /// </summary> /// <param name="img"></param> /// <param name="tplFormat"></param> public void AddTexture(Image img, TPL_TextureFormat tplFormat, TPL_PaletteFormat paletteFormat = TPL_PaletteFormat.RGB5A3) { TPL_TextureEntry tempTexture = new TPL_TextureEntry(); TPL_TextureHeader tempTextureHeader = new TPL_TextureHeader(); TPL_PaletteHeader tempPaletteHeader = new TPL_PaletteHeader(); byte[] tempTextureData = imageToTpl(img, tplFormat); byte[] tempPaletteData = new byte[0]; tempTextureHeader.TextureHeight = (ushort)img.Height; tempTextureHeader.TextureWidth = (ushort)img.Width; tempTextureHeader.TextureFormat = (uint)tplFormat; if (tplFormat == TPL_TextureFormat.CI4 || tplFormat == TPL_TextureFormat.CI8 || tplFormat == TPL_TextureFormat.CI14X2) { ColorIndexConverter cic = new ColorIndexConverter(imageToRgba(img), img.Width, img.Height, tplFormat, paletteFormat); tempTextureData = cic.Data; tempPaletteData = cic.Palette; tempPaletteHeader.NumberOfItems = (ushort)(tempPaletteData.Length / 2); tempPaletteHeader.PaletteFormat = (uint)paletteFormat; } tplTextureEntries.Add(tempTexture); tplTextureHeaders.Add(tempTextureHeader); tplPaletteHeaders.Add(tempPaletteHeader); textureData.Add(tempTextureData); paletteData.Add(tempPaletteData); tplHeader.NumOfTextures++; }