public void WriteTo(BinaryWriter writer, ITexImageContainer imageContainer) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } if (imageContainer == null) { throw new ArgumentNullException(nameof(imageContainer)); } writer.WriteNString(imageContainer.Magic); writer.Write(imageContainer.Images.Count); switch (imageContainer.ImageContainerVersion) { case TexImageContainerVersion.Version1: case TexImageContainerVersion.Version2: break; case TexImageContainerVersion.Version3: writer.Write((int)imageContainer.ImageFormat); break; default: throw new UnknownMagicException(nameof(TexImageContainerWriter), imageContainer.Magic); } foreach (var image in imageContainer.Images) { _texImageWriter.WriteTo(writer, imageContainer.ImageContainerVersion, image); } }
public ITexImage ReadFrom( BinaryReader reader, ITexImageContainer container, TexFormat texFormat) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (container == null) { throw new ArgumentNullException(nameof(container)); } if (!texFormat.IsValid()) { throw new EnumNotValidException <TexFormat>(texFormat); } var mipmapCount = reader.ReadInt32(); if (mipmapCount > Constants.MaximumMipmapCount) { throw new UnsafeTexException( $"Mipmap count exceeds limit: {mipmapCount}/{Constants.MaximumMipmapCount}"); } var readFunction = PickMipmapReader(container.ImageContainerVersion); var format = TexMipmapFormatGetter.GetFormatForTex(container.ImageFormat, texFormat); var image = new TexImage(); for (var i = 0; i < mipmapCount; i++) { var mipmap = readFunction(reader); mipmap.Format = format; if (DecompressMipmapBytes) { _texMipmapDecompressor.DecompressMipmap(mipmap); } image.Mipmaps.Add(mipmap); } return(image); }