public void Export(TextureFormat txt, MetadataWriter metadata, string directory, string basename) { TX48Texture texture = txt as TX48Texture; if (texture == null) { throw new TextureFormatException("Not a valid TX48Texture!"); } try { metadata.BeginSection("TX48Texture"); metadata.PutAttribute("Basename", basename); metadata.BeginSection("TX48Segment"); metadata.Put("Bpp", texture.Bpp); metadata.EndSection(); texture.GetImage().Save(Path.Combine(directory, basename + ".png")); metadata.EndSection(); } catch (Exception e) { throw new TextureFormatException(e.Message, e); } }
public TextureFormat Open(System.IO.Stream formatData) { BinaryReader reader = new BinaryReader(formatData); try { char[] magic = reader.ReadChars(MAGIC.Length); if (new string(magic) != MAGIC) { throw new TextureFormatException("Not a valid TX48 Texture!"); } int bpp = reader.ReadInt32(); if (bpp != 0 && bpp != 1) { throw new TextureFormatException("Illegal Bit per pixel value!"); } bpp = (bpp + 1) * 4; int width = reader.ReadInt32(); int height = reader.ReadInt32(); int paletteOffset = reader.ReadInt32(); if (paletteOffset != 0x40) { throw new TextureFormatException("TX48 Header is wrong!"); } int paletteSize = reader.ReadInt32(); int imageOffset = reader.ReadInt32(); int imageSize = reader.ReadInt32(); reader.BaseStream.Position += 0x20; byte[] paletteData = reader.ReadBytes(paletteSize); byte[] imageData = reader.ReadBytes(imageSize); PalettedTextureFormat.Builder builder = new PalettedTextureFormat.Builder(); builder.SetPaletteCodec(ColorCodec.CODEC_32BIT_RGBA) .SetIndexCodec(IndexCodec.FromBitPerPixel(bpp)); PalettedTextureFormat segment = builder.Build(imageData, paletteData, width, height); TX48Texture texture = new TX48Texture(); texture.TextureFormats.Add(segment); return(texture); } catch (Exception e) { if (e is TextureFormatException) { throw; } throw new TextureFormatException(e.Message, e); } }
public void Save(TextureFormat txt, System.IO.Stream outFormatData) { TX48Texture texture = txt as TX48Texture; if (texture == null) { throw new TextureFormatException("Not a valid TX48Texture!"); } BinaryWriter writer = new BinaryWriter(outFormatData); PalettedTextureFormat segment = texture.TextureFormats.First() as PalettedTextureFormat; byte[] img = segment.GetImageData(); byte[] pal = segment.GetPaletteData().First(); int widths = segment.Width; int heights = segment.Height; int bpps = segment.Bpp; writer.Write(MAGIC.ToCharArray()); writer.Write(bpps / 4 - 1); writer.Write(widths); writer.Write(heights); writer.Write(0x40); writer.Write(pal.Length); writer.Write(0x40 + pal.Length); writer.Write(img.Length); for (int j = 0; j < 8; j++) { writer.Write(0); } writer.Write(pal); writer.Write(img); }
public TextureFormat Import(MetadataReader metadata, string directory) { metadata.EnterSection("TX48Texture"); string basename = metadata.GetAttribute <string>("Basename"); metadata.EnterSection("TX48Segment"); int bpp = metadata.Get <int>("Bpp"); Image img = Image.FromFile(Path.Combine(directory, basename + ".png")); metadata.ExitSection(); metadata.ExitSection(); PalettedTextureFormat segment = new PalettedTextureFormat.Builder() .SetPaletteCodec(ColorCodec.CODEC_32BIT_RGBA) .SetIndexCodec(IndexCodec.FromBitPerPixel(bpp)) .Build(img); TX48Texture texture = new TX48Texture(); texture.TextureFormats.Add(segment); return(texture); }